Skip to main content

用于 Pyrogram 的快速且可移植的密码学扩展库

项目描述

TgCrypto

用于 Pyrogram 的快速且可移植的密码学扩展库

TgCrypto是一个用 C 语言编写的作为 Python 扩展的密码库。它被设计成便携、快速、易于安装和使用。TgCrypto 旨在用于Pyrogram并实现 Telegram 所需的加密算法,即:

要求

  • 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

测试

  1. 克隆此存储库:git clone https://github.com/pyrogram/tgcrypto.
  2. 输入目录:cd tgcrypto.
  3. 安装toxpip3 install tox
  4. 运行测试:tox.

执照

LGPLv3+ © 2017-至今Dan

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

TgCrypto-1.2.3.tar.gz (37.3 kB 查看哈希

已上传 source

内置发行版

TgCrypto-1.2.3-pp38-pypy38_pp73-win_amd64.whl (62.2 kB 查看哈希

已上传 pp38

TgCrypto-1.2.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (58.8 kB 查看哈希

已上传 pp38

TgCrypto-1.2.3-pp37-pypy37_pp73-win_amd64.whl (62.2 kB 查看哈希

已上传 pp37

TgCrypto-1.2.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (42.9 kB 查看哈希

已上传 pp37

TgCrypto-1.2.3-cp310-cp310-win_amd64.whl (44.9 kB 查看哈希

已上传 cp310

TgCrypto-1.2.3-cp310-cp310-win32.whl (44.7 kB 查看哈希

已上传 cp310

TgCrypto-1.2.3-cp310-cp310-musllinux_1_1_x86_64.whl (63.6 kB 查看哈希

已上传 cp310

TgCrypto-1.2.3-cp310-cp310-musllinux_1_1_i686.whl (63.6 kB 查看哈希

已上传 cp310

TgCrypto-1.2.3-cp310-cp310-macosx_11_0_arm64.whl (43.1 kB 查看哈希

已上传 cp310

TgCrypto-1.2.3-cp310-cp310-macosx_10_9_x86_64.whl (43.4 kB 查看哈希

已上传 cp310

TgCrypto-1.2.3-cp310-cp310-macosx_10_9_universal2.whl (59.0 kB 查看哈希

已上传 cp310

TgCrypto-1.2.3-cp39-cp39-win_amd64.whl (44.9 kB 查看哈希

已上传 cp39

TgCrypto-1.2.3-cp39-cp39-win32.whl (44.7 kB 查看哈希

已上传 cp39

TgCrypto-1.2.3-cp39-cp39-musllinux_1_1_x86_64.whl (63.4 kB 查看哈希

已上传 cp39

TgCrypto-1.2.3-cp39-cp39-musllinux_1_1_i686.whl (63.4 kB 查看哈希

已上传 cp39