因此,我的问题归结为:“如何使用Python中的密码加密数据”。由于缺乏文档,我放弃了Pysina。我用过
cryptography
和
argon2
包来编写我自己的加密算法(这不是我自己的加密算法,我知道加密中的第1条规则;这只是利用已有内容的过程)。以下是我的功能:
import cryptography.fernet
import argon2
import base64
def encrypt_data(data_bytes, password, salt):
password_hash = argon2.argon2_hash(password=password, salt=salt)
encoded_hash = base64.urlsafe_b64encode(password_hash[:32])
encryptor = cryptography.fernet.Fernet(encoded_hash)
return encryptor.encrypt(data_bytes)
def decrypt_data(cipher_bytes, password, salt):
password_hash = argon2.argon2_hash(password=password, salt=salt)
encoded_hash = base64.urlsafe_b64encode(password_hash[:32])
decryptor = cryptography.fernet.Fernet(encoded_hash)
return decryptor.decrypt(cipher_bytes)
下面是一个如何使用它们的示例:
cipher = encrypt_data("Hi Dude, Don't tell anyone I said Hi!".encode(), "SecretPassword", "SaltySaltySalt")
decrypted = decrypt_data(cipher, "SecretPassword", "SaltySaltySalt")
print(cipher)
print(decrypted.decode())
记住,加密只针对字节;不适用于字符串。这就是我使用
encode
/
decode
。
为什么选择argon2?因为它是一种内存困难的算法,很难用GPU和ASIC打破(是的,我是加密货币迷)。
为什么是Fernet?因为它使用AES CBC,这似乎足够安全;此外,它真的很容易使用(这正是我所需要的……我不是密码学家,所以我需要一个黑匣子来使用)。
免责声明:请注意,我不是密码学家。我只是个程序员。请随时批评我的加密和解密方式,并请随时添加您的贡献,使之更好。