我正在尝试在 pytn 中创建自定义加密 / 解密代码。我读了几篇文章,发现我可以将加密密码存储在字典中。我尝试使用它,但它不起作用。密钥将是字母按字母顺序排列 (A-Z),值将是我想放的字母 (密码)。加密密码中没有具体的移位模式。虽然在加密解密序列中也有数字 (0-9)。
dict = {'A' : 'O', 'B' : 'P', 'C' : 'J' ......'Z' : 'Z', ....
'0' : 9, '1' : 8, ............'8' : 1, '9' : 0}
这些加密的密码将存储在数据库中。我需要帮助来创建加密和解密密码的代码。如果有任何其他方法可以开始,请告诉我。
如果您不想使用 PytnCryptography Module...这里有一些代码可能会有所帮助:
我将您的dict
替换为名称en_dict
#unencrypted_item suld 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
尝试将原始字符串与字典中的键映射。
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.__geem__, string_to_encrypt))
print(encrypted_string) #ZC0
decrypted_string = ''.join(map(reverse_mapping.__geem__, encrypted_string))
print(decrypted_string) #AB1
首先,我希望您计划将您的加密方案仅用于学术目的,因为这种简单的替换密码非常不安全。对于最基本的安全级别,您应该考虑存储用户密码的盐渍哈希,或者使用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'
ert ciphertext.translate(tr_decrypt) == plaintext
plaintext = 'THIS IS test 128'
ciphertext = plaintext.translate(tr_encrypt)
>>> ciphertext
'THIS IS test 821'
ert ciphertext.translate(tr_decrypt) == plaintext
前几行以str.translate()
要求的形式设置加密和解密转换表。然后,只需在字符串上调用 translate 即可根据需要进行加密和解密。
第二个示例显示,转换表中不存在的字符串中的任何字符都保持不变,这可能是您想要的,也可能不是您想要的。
我想这就是你想要的。你可以使用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.cice(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
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(69条)