python的快速电报加密库
TgCrypto的Python项目详细描述
tgcrypto
Fast and Portable Telegram Crypto Library for Python
tgcrypto是一个用c89编写的作为python扩展的电报加密库。它的设计是便携式的,快速的,简单的 安装和使用。tgcrypto用于Pyrogram并实现加密 电报要求的算法,即:
AES256-IGE
-用于MTProto v2.0。AES256-CTR
-用于CDN encrypted files。AES256-CBC
-用于encrypted passport credentials。
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
测试
- 克隆此存储库:
git clone https://github.com/pyrogram/tgcrypto
。 - 输入目录:
cd tgcrypto
。 - 运行测试:
python3 setup.py test
。