根据RFC7539的AEAD施工

rfc7539的Python项目详细描述


PyPITravis

关于

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 从解密回来。如果返回的类型是不需要的,当然总是可以在 bytesstr根据需要。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript通过WebSocket将服务器时间推送到多个客户端   这种java字节转换是如何工作的   数据库错误。sql。SQLEception:参数索引超出范围(1>参数数,为0)   java如何在搜索时过滤选定的viewpager片段中的recyclerview?   java如何使用OpenCV将图像转换为黑白图像并在ANDROID中消除阴影   Spring MVC项目中的java HTTP服务器状态404错误   Spring MVC中的java JSR303自定义约束验证器   java如何基于另一个ArrayList的值显示ArrayList中的特定项?   java如何在firebase messages节点获取最后发送给我的消息?   部署后在google app engine上运行servlet时发生java错误   java如何使用servlet在两个jsp之间发送数据   java日历年中的周是月中的周   从URL读取一个资源并直接返回这些字节作为REST请求的响应,Java 7和spring MVC 3.2不存储内存