首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密解密

加密解密
EN

Stack Overflow用户
提问于 2021-07-03 11:16:37
回答 4查看 124关注 0票数 0

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

代码语言:javascript
复制
  dict = {'A' : 'O', 'B' : 'P', 'C' : 'J' ......'Z' : 'Z', ....
'0' : 9, '1' : 8, ............'8' : 1, '9' : 0}

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

EN

回答 4

Stack Overflow用户

发布于 2021-07-03 11:25:35

如果您不想使用Python Cryptography Module...下面是一些可能有帮助的代码:

我要用en_dict替换你的dict

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2021-07-03 11:28:22

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2021-07-03 11:58:35

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

对于您的特定问题,可以使用带有str.translate()的映射字典一次性转换字符串,而不需要在代码中显式循环,或者使用其他函数,如map()join()

代码语言:javascript
复制
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,这可能会很多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68232960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档