解密程序:加密解密(encryption decryption)

我正在尝试在 python 中创建自定义加密 / 解密代码。我读了几篇文章,发现我可以将加密密码存储在字典中。我尝试使用它,但它不起作用。密钥将是字母按字母顺序排列 (A-Z),值将是我想放的字母 (密码)。加密密码中没有具体的移位模式。虽然在加密解密序列中也有数字 (0-9)。

  dict = {'A' : 'O', 'B' : 'P', 'C' : 'J' ......'Z' : 'Z', ....
'0' : 9, '1' : 8, ............'8' : 1, '9' : 0}

这些加密的密码将存储在数据库中。我需要帮助来创建加密和解密密码的代码。如果有任何其他方法可以开始,请告诉我。

1

如果您不想使用 PythonCryptography Module...这里有一些代码可能会有所帮助:

我将您的dict替换为名称en_dict

#unencrypted_item should be a string
def encrypt(unencrypted_item):
    result = ""
    for i in unencrypted_item:
        result+=en_dict[i]
    return result
def encrypt(encrypted_item):
    result = ""
    for i in encrypted_item:
        for n in en_dict:
            if en_dict[n] == i:
                result += n
                break
    return result
1

尝试将原始字符串与字典中的键映射。

mapping = {'A':'Z', 'B':'C', '1':'0', '2':'7'}
reverse_mapping = dict((j,i) for i,j in mapping.items())
string_to_encrypt = 'AB1'
encrypted_string = ''.join(map(mapping.__getitem__, string_to_encrypt))
print(encrypted_string) #ZC0
decrypted_string = ''.join(map(reverse_mapping.__getitem__, encrypted_string))
print(decrypted_string) #AB1
1

首先,我希望您计划将您的加密方案仅用于学术目的,因为这种简单的替换密码非常不安全。对于最基本的安全级别,您应该考虑存储用户密码的盐渍哈希,或者使用bcrypt

WRT 到您的特定问题,使用您的映射字典str.translate()一次性翻译字符串,而无需在代码中显式循环,或使用其他函数,如map()join()

encrypt_dict = {'A': 'O', 'B': 'P', 'C': 'J', 'Z': 'Z', '0': 9, '1': 8, '8': 1, '9': 0}
tr_encrypt = {ord(str(k)): ord(str(encrypt_dict[k])) for k in encrypt_dict}
tr_decrypt = {tr_encrypt[k]: k for k in tr_encrypt}
plaintext = 'ABCZ0189'
ciphertext = plaintext.translate(tr_encrypt)
>>> ciphertext
'OPJZ9810'
assert ciphertext.translate(tr_decrypt) == plaintext
plaintext = 'THIS IS test 128'
ciphertext = plaintext.translate(tr_encrypt)
>>> ciphertext
'THIS IS test 821'
assert ciphertext.translate(tr_decrypt) == plaintext

前几行以str.translate()要求的形式设置加密和解密转换表。然后,只需在字符串上调用 translate 即可根据需要进行加密和解密。

第二个示例显示,转换表中不存在的字符串中的任何字符都保持不变,这可能是您想要的,也可能不是您想要的。

1

我想这就是你想要的。你可以使用string.printable[:61],其中string.printable打印所有 ASCII 字符,[:61]从索引 0 到 61 取所有字符-这是字母和数字

import string
import random
normla_l=list(string.printable[:61])
new_l=list(string.printable[:61])
random.shuffle(new_l)
see_list={x:y for x,y in zip(normla_l,new_l)}
def change_list(char):
    return see_list.get(char) if char!='' else random.choice(normla_l) 
x=input("Enter string: ")
print(''.join([change_list(char.strip()) for char in x]).strip())

Sample

Enter string: This string will be encrypted
Xqv7G74HvTxbPv55psIVITzHhg4IN

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(67)
Honor 8 c:为什么bash不会在文件路径中转义空格或荣誉引号
上一篇
空间装饰代码:GitHub代码空间 CORS问题
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(20条)