我正在尝试用python创建一个自定义的加密/解密代码。我读了几篇文章,发现我可以将加密密码存储在字典中。我试着用它,但它不工作。键将是按字母顺序排列的字母(A-Z),值将是我想放入的字母(密码)。加密密码中没有特定的移位模式。加解密中也有数字(0-9)。但它们是按顺序排列的。
dict = {'A' : 'O', 'B' : 'P', 'C' : 'J' ......'Z' : 'Z', ....
'0' : 9, '1' : 8, ............'8' : 1, '9' : 0}这些加密的密码将存储在数据库中。我需要帮助来创建加密和解密密码的代码。如果有其他方法可以开始,请让我知道。
发布于 2021-07-03 11:25:35
如果您不想使用Python Cryptography Module...下面是一些可能有帮助的代码:
我要用
en_dict替换你的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发布于 2021-07-03 11:28:22
尝试将原始字符串与字典中的键进行映射。
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发布于 2021-07-03 11:58:35
首先,我希望您计划将您的加密方案仅用于学术目的,因为这种简单的替代密码非常不安全。对于最基本的安全级别,您应该考虑存储用户密码的加了盐的散列,或者使用bcrypt之类的东西。
对于您的特定问题,可以使用带有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对字符串进行加密和解密即可。
第二个示例显示,字符串中没有出现在转换表中的任何字符都将保持不变,这可能是您想要的,也可能不是。您可以创建一个涵盖所有预期字符的转换映射,但如果您使用unicode,这可能会很多。
https://stackoverflow.com/questions/68232960
复制相似问题