根据RFC7539的AEAD施工
rfc7539的Python项目详细描述
关于
RFC7539是一个ietf规范,用于将 并入TLSV1.3。它由一个流密码(chacha20)和一个mac(poly1305)组成,两者都是 作者:丹尼尔·J·伯恩斯坦。这两个原语的c实现来自 NSS库(原因是OpenSSL有许可证不兼容,还需要 openssl头的开销比我们实现这些基本原语所需的开销要大)。 nss代码经过了一些修改,以解释96位nonce和32位计数器 在RFC中指定。
安装
方法1
pip install rfc7539
方法2
git clone https://github.com/AntonKueltz/rfc7539.git
cd rfc7539
python setup.py install
用法
您应该使用经过身份验证的加密模式,除非您真的需要使用其中一个原语 本身:
fromrfc7539importaeadfromosimporturandomkey=urandom(32)# key is 32 bytesnonce='thisisanonce'# nonce is 12 bytes (DO NOT REUSE A NONCE WITH THE SAME KEY)message='Some message to be encrypted'additional_data='Some additional data'# this will not be encrypted but will be verified for integrity# encryptionciphertext,mac=aead.encrypt_and_tag(key,nonce,message,additional_data)# decryption (which yields plaintext == message)plaintext=aead.verify_and_decrypt(key,nonce,ciphertext,mac,additional_data)
关于python 2与3的说明
在python2中,加密、解密和标记将返回str
数据,而在python3中,它们将返回
bytes
数据。这与python库在两个版本之间的操作量是一致的(例如。
见binascii.unhexlify
)。这可能会导致一些奇怪的行为,例如,在
python3,解密后,解密的值与原始值不匹配,因为您得到了bytes
从解密回来。如果返回的类型是不需要的,当然总是可以在
bytes
和str
根据需要。