根据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第三方库


热门话题
java限制C++代码访问JNI中的某些类   Android上的java DateFormat:不可解析的日期   通过json进行java迭代,并为其他请求调用多个API   Netbeans中的java JavaFX项目引发异常“输入流不能为null”   多线程Java newFixedThreadPool解释   |在java字符串中无法识别。split()方法   Java中的原始包装器类是否被视为引用类型?   Java swing。如何在intellij idea GUI设计工具中重写组件方法   数组乘矩阵   java将30GB的XML文件分割成小块XML   java通过一棵树递归找到一个节点,并返回指向该节点的路径   java如何将可观察的<Observable<List<T>>转换为可观察的<List<T>>   使用java在web服务器上更改php文件中的字符串?   java希望开发像tomcat这样的servlet容器   java希望提高编程的数学技能