根据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 jgrapht SimpleDirectedWeightedGraph规范化权重   java安卓使用CFB   java如何从javaclass警告浏览器?可能吗?   javagson结构难点   java使用jbossclient的最佳方式是什么。Wildfly 10应用程序中的jar?   JAVA:socket重写以使用CipherInputStream和CipherOutputStream   java Android UI测试长时间点击并拖动   java如何在Android中重置AtomicInteger唯一Id?   多线程客户端/服务器应用程序上的java客户端断开连接   GAE Memcache中的java损坏值   java如何使用变量作为资源的路径?   爪哇?(三向)操作员