用于 Pyrogram 的快速且可移植的密码学扩展库
项目描述
TgCrypto
用于 Pyrogram 的快速且可移植的密码学扩展库
TgCrypto是一个用 C 语言编写的作为 Python 扩展的密码库。它被设计成便携、快速、易于安装和使用。TgCrypto 旨在用于Pyrogram并实现 Telegram 所需的加密算法,即:
AES-256-IGE
- 在MTProto v2.0中使用。AES-256-CTR
- 用于CDN 加密文件。AES-256-CBC
- 用于加密护照凭证。
要求
- Python 3.6 或更高版本。
安装
$ pip3 install -U tgcrypto
API
TgCrypto API 由以下六个方法组成:
def ige256_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...
def ige256_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...
def ctr256_encrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes: ...
def ctr256_decrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes: ...
def cbc256_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...
def cbc256_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...
用法
IGE 模式
注意:必须填充数据以匹配块大小的倍数(16 字节)。
import os
import tgcrypto
data = os.urandom(10 * 1024 * 1024 + 7) # 10 MB of random data + 7 bytes to show padding
key = os.urandom(32) # Random Key
iv = os.urandom(32) # Random IV
# Pad with zeroes: -7 % 16 = 9
data += 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 模式(单块)
import os
import tgcrypto
data = os.urandom(10 * 1024 * 1024) # 10 MB of random data
key = os.urandom(32) # Random Key
enc_iv = bytearray(os.urandom(16)) # Random IV
dec_iv = enc_iv.copy() # Keep a copy for decryption
ctr_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
点击率模式(流)
import os
from io import BytesIO
import tgcrypto
data = BytesIO(os.urandom(10 * 1024 * 1024)) # 10 MB of random data
key = os.urandom(32) # Random Key
enc_iv = bytearray(os.urandom(16)) # Random IV
dec_iv = enc_iv.copy() # Keep a copy for decryption
enc_state = bytes(1) # Encryption state, starts from 0
dec_state = bytes(1) # Decryption state, starts from 0
encrypted_data = BytesIO() # Encrypted data buffer
decrypted_data = BytesIO() # Decrypted data buffer
while True:
chunk = data.read(1024)
if not chunk:
break
# Write 1K encrypted bytes into the encrypted data buffer
encrypted_data.write(tgcrypto.ctr256_encrypt(chunk, key, enc_iv, enc_state))
# Reset position. We need to read it now
encrypted_data.seek(0)
while True:
chunk = encrypted_data.read(1024)
if not chunk:
break
# Write 1K decrypted bytes into the decrypted data buffer
decrypted_data.write(tgcrypto.ctr256_decrypt(chunk, key, dec_iv, dec_state))
print(data.getvalue() == decrypted_data.getvalue()) # True
CBC模式
注意:必须填充数据以匹配块大小的倍数(16 字节)。
import os
import tgcrypto
data = os.urandom(10 * 1024 * 1024 + 7) # 10 MB of random data + 7 bytes to show padding
key = os.urandom(32) # Random Key
enc_iv = bytearray(os.urandom(16)) # Random IV
dec_iv = enc_iv.copy() # Keep a copy for decryption
# Pad with zeroes: -7 % 16 = 9
data += 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
. - 安装
tox
:pip3 install tox
- 运行测试:
tox
.
执照
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
TgCrypto-1.2.3.tar.gz
(37.3 kB
查看哈希)
内置发行版
TgCrypto-1.2.3-cp310-cp310-win_amd64.whl
(44.9 kB
查看哈希)
TgCrypto-1.2.3-cp310-cp310-win32.whl
(44.7 kB
查看哈希)
TgCrypto-1.2.3-cp39-cp39-win_amd64.whl
(44.9 kB
查看哈希)
TgCrypto-1.2.3-cp39-cp39-win32.whl
(44.7 kB
查看哈希)