如何在python 3.7中加密和解密字符串?

如何在python 3.7中加密和解密字符串?,python,python-3.x,security,Python,Python 3.x,Security,。但是PyCrypto并没有同时安装在python 3.6.5和3.7.0上 所以,我实现了一些类似Gronsfeld的密码。我知道,这很糟糕,但我可以简单地用密码加密和解密字符串 def encrypt(string, password): int_list = [] password_len = len(password) for cnt, sym in enumerate(string): password_sym = password[cnt %

。但是PyCrypto并没有同时安装在python 3.6.5和3.7.0上

所以,我实现了一些类似Gronsfeld的密码。我知道,这很糟糕,但我可以简单地用密码加密和解密字符串

def encrypt(string, password):
    int_list = []
    password_len = len(password)
    for cnt, sym in enumerate(string):
        password_sym = password[cnt % password_len]
        int_list.append(ord(sym)-ord(password_sym))
    return int_list

# got some list which contain mine key to Todoist api, yes, this can be bruteforced, but same as any other API key
>>> [-20, -20, -50, -14, -61, -54, 2, 0, 32, 27, -51, -21, -54, -53, 4, 3, 29, -14, -51, 29, -10, -6, 1, 4, 28,
       29, -55, -17, -59, -42, 2, 50, -13, -14, -52, -15, -56, -59, -44, 4]

def decrypt(int_list, password):
    output_string = ""
    password_len = len(password)
    for cnt, numb in enumerate(int_list):
        password_sym = password[cnt % password_len]
        output_string += chr(numb+ord(password_sym))
    return output_string

那么,如何正确地完成它呢?

密码学是一个积极开发的库,提供加密配方和原语。它支持Python2.6-2.7、Python3.3+和PyPy

装置

$ pip install cryptography
使用高级对称加密配方的示例代码:

from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher_suite = Fernet(key)
cipher_text = cipher_suite.encrypt(b"A really secret message. Not for prying eyes.")
plain_text = cipher_suite.decrypt(cipher_text)

我测试了你的代码,它是有效的。你到底有什么问题?你试过安装PyCrypto吗?它在3.6上运行良好。@Sharku我认为它不安全:/@DanielRoseman`Command“c:\program files(x86)\python36-32\python.exe“-u-c”导入设置工具,标记化__文件\uuuc:\\Users\\EEgorov.NWX\\AppData\\Local\\Temp\\pip-install-6hs9ukdo\\pycrypto\\setup.py';f=getattr(标记化“打开”,打开)(文件);code=f.read().replace('\r\n','\n');f、 close();exec(compile(code,file,'exec'))“安装--记录C:\Users\EEgorov.NWX\AppData\Local\Temp\pip-record-m0z81zyx\install-record.txt--外部管理的单一版本--编译”失败,错误代码为C:\Users\EEgorov.NWX\AppData\Local\Temp\pip-install-6hs9ukdo\pycrypto`如果密钥不正确,则引发异常,因此,它可以以新的速度进行暴力操作,甚至不需要在线检查API密钥。不要认为这会提高安全性。@EgorEgorov我没法弄清楚你!你能给我一个出错的示例代码吗?您应该给出长度为44的键,否则将导致“不正确的填充”。Fernet.generate_key()生成一个随机密钥。如果需要,可以生成密钥。确保维护此格式--->key=b'Yzx79GUul49KKI11kQ-42pjySAMDCbKywCrDravrbkg='code在有疑问的情况下,它会迭代密码符号。因此,如果代码得到错误的密码,它将生成带有错误unicode符号的字符串,而不是抛出异常。@EgorEgorov任何解密函数都不会说它是否正确,但函数将获取密钥和密文并返回输出!这里的键长度是42。因此,为了进行暴力攻击,您需要使用(可以有96个字符)96*96*…………*96=96^42组合。所以从数学上讲,暴力需要很多时间,你的生命也就结束了。我们应该如何存储Fernet生成的密钥,以便将来进行加密/解密?