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 HttpSession API   如果模式可用,xml java将忽略DTD进行验证   java从远程位置调用Jersey API   在Java中直接从URL读取html   如何使用#Hibernate#Spring#Java在MySql中存储“日期”?   java如何在JSP中迭代列表对象?   java如何使用PDFBox确定实际PDF内容的位置?   utf 8计算Java字符串的UTF8长度,而不实际对其进行编码   java我正在尝试通过whatsapp或任何其他messenger应用程序发送/共享mp3原始文件。   使用Java定期将记录写入CSV文件   用于队列和工作程序设计的java实时执行器池   java与t1的区别是什么。当前线程和线程。当前线程?   java将大字符串写入文本文件?   java传递给侦听器   java如何从对象列表向JComboBox添加项