Простой и безопасный алгоритм шифрования и дешифрования на основе пароля, основанный на хеш-функциях, реализованный исключительно на Python.
Установите с помощью команды pip install pyhcrypt
.
encrypt(input, password, use_rand=True)
Шифрует input
(либо bytes
, либо открытый file object
) с помощью password
(либо bytes
, либо str
), возвращает результат шифрования (bytes
). Если input
является открытым file object
, эта функция работает как генератор и шифрует по 64 байта за раз, чтобы экономить память.
Если use_rand
установлено в True
(по умолчанию), 64 случайных байта будут зашифрованы перед обработкой input
, и результат шифрования также будет на 64 байта длиннее, чем input
. Это помогает защитить password
, особенно в случаях, когда input
начинается с определённого шаблона.
decrypt(input, passwd, use_rand=True)
Дешифрует input
(либо bytes
, либо открытый file object
) с помощью password
(либо bytes
, либо str
), возвращает результат дешифровки (bytes
). use_rand
должен соответствовать настройке encrypt
.
Шифрование и дешифровка байтов.
from pyhcrypt import encrypt, decrypt
from os import urandom
bytes_ori = urandom(64)
passwd = "a_password"
bytes_enc = encrypt(bytes_ori, passwd)
bytes_dec = decrypt(bytes_enc, passwd)
print(bytes_ori == bytes_dec)
Шифрование или дешифровка файла.
from pyhcrypt import encrypt, decrypt
def handle(cmd, passwd, srcf, rsf):
func = decrypt if cmd.find("d") >= 0 else encrypt
with open(srcf, "rb") as rf, open(rsf, "wb") as wf:
for _ in func(rf, passwd):
wf.write(_)
Выполните либо
python -m pyhcrypt action password input_file output_file
либо
pyhcrypt action password input_file output_file
,
где action
может быть либо e
(для шифрования), либо d
(для дешифровки), password
— это пароль, input_file
и output_file
— соответствующие входной и выходной файлы соответственно. -
для стандартного ввода/вывода.
Тестирование проводилось на CPython 3.10.4 с использованием одного потока процессора Intel Core M3-7Y30. Несмотря на то что Python медленнее, чем C, эта библиотека всё же обеспечивает скорость шифрования/дешифровки 31,3 МБ/с.
Мы шифруем сообщение в кодировке UTF-8 с помощью функции encrypt
16 раз подряд следующим кодом.
from gzip import compress
from pyhcrypt import encrypt
def puzzle(msg, n):
gz_msg = compress(msg)
for i in range(n):
print(encrypt(gz_msg, msg, use_rand=True))
Результаты шифрования следующие.
b'\xdaz>\x9b\xf2s\x84\x08\xc5O\xa7\xe28{\xbe|\xc4\xd77\xac\x98\x96\xb7\xb9\xf8\xcc@\x94\x1b\x06\xbb\xae\x84\xbc\x9e\xcaN\xd6\xc4\xc9\xca\x07 \xa2\xca4\xa4\xf82\xa4*q\x114\xbcW\xe6\x10\xd6\xf8/H\xc0t\xfb\x1d3\xa2\x9d\xa9H\n\xbf\xf8\x90{\x0f\xf3/b|\xe9\x9b\x95\xbd\xb2\x11Ri$)7\xb4\xd8\xdc\x0e+\x9fL<\x1cH\xb4\x01;\x03\xfb{\x1bj\x00gC\xd3\x91\xb4\xd4M\x85\xc72P\x9aI\x86\tlV\xd7\x0e["\xea\xef\xfb\xe5\x8fl 8s\xbc\xf5\xdc?k9\xdd\x96\xe7\xa9QE,6\xfa\x1d\x06\\g(\xa7\x1ew\xddv\xa06\xb6\xf3\xf3\xf2\xbb\x9a@\x0c\x0c\xe9\xaf\xb1;\xed'
b'\xb9C\xca""\x15\x94\xbb\x80\xb0\xc0\xb3\x04h\x1au\xbe?\x16)\x883;\xb8\xa8h\xf2u\xc4\x8a\xd6\x94@\n\xd0Z\xedPu\x045\x87\x91\x9eO\x8c\xb7\xf3O9\xdcW\xeay\x84d\x91v\xeb\x99\xea\x10f\xcd\xc7 k\x91\x8a\xaf)\xe6\xb5\xdd\xf8r76\x9fb\x1d\x8c\x0c\xf6\xc7\x19p\xa1i\x03NA=\xd2&\xff>1a\xf6\x18Wx>p\xf4\xf06=L\xadg\xb5\xfe\x08T,c6]\xf0\x8er_-\x92\x0e\x964\xa1\xf8b\xee\x04\xe4\xf6\xafHM\xf5(-L{K\xa0E\xd9\x87EN\xf3,e\x05\x82E\xe2\xd7p\x08\xabS;U\xfa\xb0\xdd9\x0c\x86D\xb3\xec_\xec\xe1\x15pj.\xe9'
b"x\x8e\x9f\x91\\\x0b\xf2\xc4G,\xe4\x073\x8e\xa3 _\xf0\x87W\xb7R\x19\xe6f\xb9d\xf2\xac\xe4N\\&\x02\x8e$\x1dZ@\xcf\xcb\xe7\xccd\xe8\xcb\x88\x10\xd5v\x08\xa2/\xd2\xf5y\x18_Sz)\xdc>^NM\x92'd\x1c\xb8\xa3|\x00e\xa5\x1fe\xf5\xef,!\xaf2+\xc1\xfcL\xd7_\xd2/\x93\xa3@3|\x0c\xa1\xec\xde\xae\x18\xefY\xabcF\xb9z4 \xba\xf3\x10/\x8f\x85\x04\x18*\x9ay\xb0\xa4\x1e\x96P~[\xc6\xd7\x864\xbf\xdf\xbb\xd4g\x88w\xcd\xf6\x9b\xa4c\x98*E\x9a@\x11\x84p\x1f\x9f\xfb<^g7v\x9c\xd96\x0e\xf6J\x01\x93Ou\xb8\t\x15\xcd\xe9\xed<\x99y\xdc" **Текст запроса:**
b'\x9f\x14\xebRn\xdb\xfe\x8b@(\xdf\x1e&\xada\x80\x91\xba\xa3+\xb7g\x8b!\xe0$\xe3\xd3\xa2\x12c6\x04h\xd6\x03\x83\x89\xb0\xf5;(\xddz\xe5\xfeR\xaf,\xb40\xc8\\TX!(\xd9\x92\xc0\xa0\x9dW\'3\x19n-;\x1c\xdb\xee\x0e\xe3\xb0\x91L9\xbd\x1e\xef\xe9\xb3\xc5\xb6+\xf1\xd26&\xceK\xaa\xa4l\x9e^\xb3!\x0f\x91N,\xb0\x11b"\x85\xc0\xd3\x136xU\x8c\'X\xc5+\xef\xb0~\xc0\xc1\xa3\xe1g/\xb7q\x99M?\x9d\xe0p\xfe\x85\x13\x9e4\x84\xca-\x81\xa4\xd9^\x1a\xfb\xa1\xaa\\\x05z\xc9\x0b\x98\xe1\xfdi\x88\x8fu\xef\xea\xf5\xef\x8f\xf7\xf5bf\x9f\x14\x98r\x8f\xe0\xa4P\xe8'
**Перевод:**
Данный текст представляет собой последовательность символов, не имеющих смысла или значения. Это может быть частью кода или зашифрованным сообщением. Для понимания содержания текста необходимо знать контекст или дополнительную информацию. Данный текст представляет собой набор символов, не имеющий смысла. Возможно, это часть программного кода или случайный набор данных.
Для корректного перевода и понимания текста необходимо предоставить больше информации о его происхождении и назначении.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )