python的快速电报加密库

TgCrypto的Python项目详细描述


tgcrypto

Fast and Portable Telegram Crypto Library for Python

tgcrypto是一个用c89编写的作为python扩展的电报加密库。它的设计是便携式的,快速的,简单的 安装和使用。tgcrypto用于Pyrogram并实现加密 电报要求的算法,即:

pythonwheels are available用于无麻烦的安装;它们是 使用travis ci(linux,macos)和appveyor(windows)为32位和64位自动构建和测试 建筑。

尽管tgcrypto主要用于pyrogram,但您可以免费使用它,并欢迎将其用于任何其他 python项目也是,因为它是作为独立的包提供的。

更多信息:https://docs.pyrogram.org/topics/tgcrypto

要求

  • Python3.4或更高版本。

安装

$ pip3 install -U tgcrypto

API

tgcrypto api由以下六种方法组成:

defige256_encrypt(data:bytes,key:bytes,iv:bytes)->bytes:...defige256_decrypt(data:bytes,key:bytes,iv:bytes)->bytes:...defctr256_encrypt(data:bytes,key:bytes,iv:bytes,state:bytes)->bytes:...defctr256_decrypt(data:bytes,key:bytes,iv:bytes,state:bytes)->bytes:...defcbc256_encrypt(data:bytes,key:bytes,iv:bytes)->bytes:...defcbc256_decrypt(data:bytes,key:bytes,iv:bytes)->bytes:...

用法

ige模式

note:必须填充数据以匹配块大小的倍数(16字节)。

importosimporttgcryptodata=os.urandom(10*1024*1024+7)# 10 MB of random data + 7 bytes to show paddingkey=os.urandom(32)# Random Keyiv=os.urandom(32)# Random IV# Pad with zeroes: -7 % 16 = 9data+=bytes(-len(data)%16)ige_encrypted=tgcrypto.ige256_encrypt(data,key,iv)ige_decrypted=tgcrypto.ige256_decrypt(ige_encrypted,key,iv)print(data==ige_decrypted)# True

CTR模式(单块)

importosimporttgcryptodata=os.urandom(10*1024*1024)# 10 MB of random datakey=os.urandom(32)# Random Keyenc_iv=bytearray(os.urandom(16))# Random IVdec_iv=enc_iv.copy()# Keep a copy for decryptionctr_encrypted=tgcrypto.ctr256_encrypt(data,key,enc_iv,bytes(1))ctr_decrypted=tgcrypto.ctr256_decrypt(ctr_encrypted,key,dec_iv,bytes(1))print(data==ctr_decrypted)# True

CTR模式(流)

importosfromioimportBytesIOimporttgcryptodata=BytesIO(os.urandom(10*1024*1024))# 10 MB of random datakey=os.urandom(32)# Random Keyenc_iv=bytearray(os.urandom(16))# Random IVdec_iv=enc_iv.copy()# Keep a copy for decryptionenc_state=bytes(1)# Encryption state, starts from 0dec_state=bytes(1)# Decryption state, starts from 0encrypted_data=BytesIO()# Encrypted data bufferdecrypted_data=BytesIO()# Decrypted data bufferwhileTrue:chunk=data.read(1024)ifnotchunk:break# Write 1K encrypted bytes into the encrypted data bufferencrypted_data.write(tgcrypto.ctr256_encrypt(chunk,key,enc_iv,enc_state))# Reset position. We need to read it nowencrypted_data.seek(0)whileTrue:chunk=encrypted_data.read(1024)ifnotchunk:break# Write 1K decrypted bytes into the decrypted data bufferdecrypted_data.write(tgcrypto.ctr256_decrypt(chunk,key,dec_iv,dec_state))print(data.getvalue()==decrypted_data.getvalue())# True

CBC模式

note:必须填充数据以匹配块大小的倍数(16字节)。

importosimporttgcryptodata=os.urandom(10*1024*1024+7)# 10 MB of random data + 7 bytes to show paddingkey=os.urandom(32)# Random Keyenc_iv=bytearray(os.urandom(16))# Random IVdec_iv=enc_iv.copy()# Keep a copy for decryption# Pad with zeroes: -7 % 16 = 9data+=bytes(-len(data)%16)cbc_encrypted=tgcrypto.cbc256_encrypt(data,key,enc_iv)cbc_decrypted=tgcrypto.cbc256_decrypt(cbc_encrypted,key,dec_iv)print(data==cbc_decrypted)# True

测试

  1. 克隆此存储库:git clone https://github.com/pyrogram/tgcrypto
  2. 输入目录:cd tgcrypto
  3. 运行测试:python3 setup.py test

许可证

LGPLv3+©2017-2019Dan

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

推荐PyPI第三方库


热门话题
java如何序列化数字?   java如何用我的Mainclass扩展ListActivity类和Fragment类?   JavaJersey、Jackson和JAXRS发布了多种JSON格式   java如何使用JavaFXKeyCombination覆盖系统默认的键盘快捷键,如Ctrl+C、Ctrl+V?   java Jersey类路径扫描示例Jersey。配置。服务器供应商。类路径   java什么样的数据结构可以作为一个数组,但在同一索引下给定多个值时会自动增长到第二维度?   java如何序列化非持久实体中的嵌套PersistentEntityResource   协议缓冲区我可以让protoc在Java中生成int数组吗?   在GregorianCalendar ArrayList Java中添加日期元素   从html模板动态生成pdf文件并用java生成目录   java Gridgain 6.5.5开源多个节点速度较慢。。?   java如何检查数组中所有整数的不相等性?   java在Eclipse中,如何多次运行JUnit测试用例   java侦听器不能处理特定的片段   java不是一个声明?(蓝色J)   找不到Attributer类型的PersonId的java定义