Гаджет простого шифрования (easy_encryption_tool)
Гаджет простого шифрования (easy_encryption_tool)

Предыстория проекта

В процессе работы и учебы мне часто приходится быстро выполнять операции шифрования и дешифрования данных. Однако я обнаружил, что существующие инструменты шифрования, такие как openssl, хоть и полнофункциональны, но не интуитивно понятны в использовании, особенно для непрофессионалов.

Например, когда я хочу подтвердить простую строку «привет,world”руководитьAESшифрованиечас,использовать openssl необходимо выполнить ряд довольно сложных команд.,нравитьсяecho -n "hello,world" | openssl enc -aes-256-cbc -salt -a -pass pass:yourpassword

примеры параметров openssl
примеры параметров openssl

Такая операция не только подвержена ошибкам, но и требует запоминания большого количества команд и параметров. Для новичков или пользователей, которые время от времени используют функции шифрования, это, несомненно, увеличит стоимость обучения и сложность использования.

Поэтому я разработал более интуитивно понятный и простой в использовании гаджет шифрования — easy_encryption_tool. Хотя это инструмент командной строки, я стараюсь быть максимально простым и кратким в интерактивном режиме, предоставляя как можно более четкое описание параметров:

Пример описания параметра
Пример описания параметра
шифрование示例
шифрование示例

用户Толькочерез простойиз Заказипараметр,можно сделать легкошифрование、Расшифровать、знак Проверка и другие операции.

Например, если вы хотите «привет»,world”нитьруководитьAESшифрование,Тольковходитьeasy_encryption_tool aes -a encrypt -i hello,worldВот и все。

easy_encryption_toolне только поддержкаверно Взвесьте и добавьте Расшифровать、Нетверно Взвесьте и добавьте Расшифровать、знак Проверка、Сертификатанализировать、Расчет HMAC и случайная строкаи другие функции,Он также обеспечивает поддержку трех методов вывода входить: верная строка, base64Закодированный поток байтов и файл. Это позволяет пользователям гибко выбирать метод вывода входа в соответствии со своими потребностями.,Улучшена полезность инструмента.

верно Для опытных пользователей,easy_encryption_toolТакже предоставленоверношифрованиемодель、ключ、IV、Нетверносказатьшифрованиенаполнениемодель、Нетверносказатьзнак Хэш-алгоритмждатьждатьпараметриз Гибкие настройки。

Для асимметричного шифрования и дешифрования этот инструмент в настоящее время поддерживает только строки и потоки байтов в кодировке Base64 в качестве входных и выходных данных.,Это потому, чтодля Нетверно Взвесьте и добавьте Расшифровать Алгоритмы, как правило, более подходят дляшифрованиенебольшой объем данных,Типа верно назвал ключом и т.д. несмотря на это,Этот дизайн по-прежнему может удовлетворить большинство повседневных потребностей.шифрованиенуждаться。

easy_encryption_tool — это не только практичный инструмент шифрования, но и хороший вводный инструмент. Для тех, кто хочет понять алгоритмы шифрования, с помощью этого инструмента вы сможете более интуитивно понять принципы и процедуры работы различных алгоритмов шифрования, тем самым углубляя свое понимание и овладение технологией шифрования.

будущее,Автор также планируетверноeasy_encryption_toolруководить Постоянные обновленияи Итерировать,Добавьте больше практичных функций и алгоритмов,нравитьсяНациональные секретные алгоритмы SM2, SM3 и SM4ждать,Для удовлетворения растущих потребностей пользователейшифрованиенуждаться。Я считаю,Поскольку инструменты продолжают совершенствоватьсяиразвивать,Это будет удобнее для большего количества пользователей.、Эффективныйибезопасныйшифрованиеспособность。

Адрес проекта

easy_encryption_tool

идеи дизайна

анализ потребностей

Целевые группы пользователей: разработчики, менеджеры данных, специалисты по безопасности, которым необходимо быстро освоить возможности криптографии, и обычные пользователи, интересующиеся технологией шифрования.

  • Функциональные требования Поддерживает несколько алгоритмов шифрования. Упрощение операций шифрования и снижение порогов использования. Предоставляет несколько методов ввода и вывода. Поддерживает базовый анализ сертификатов. Поддержка расчета HMAC Поддержка генерации случайных чисел
  • Нефункциональные требования: Инструмент должен быть стабильным и надежным, а процесс шифрования не должен быть подвержен ошибкам. Пользователи могут использовать его немедленно, и операция проста.

принципы проектирования

Простота использования: за счет упрощения команд и параметров снижается стоимость обучения и упрощается использование инструмента.

Масштабируемость: при проектировании следует учитывать будущее расширение функциональных возможностей и обновление алгоритмов.

Безопасность: Обеспечьте безопасность процесса шифрования и целостность данных.

Функциональный дизайн

  • командный дизайн Создайте краткий и интуитивно понятный формат команд.,нравиться:easy_encryption_tool <алгоритм> <модель> <действовать> <входить> Предоставляет справочные команды со списком всех доступных алгоритмов, режимов и операций.
  • Поддержка алгоритма: Интегрируйте общие алгоритмы симметричного шифрования (например, AES-CBC) и по умолчанию блокируйте небезопасные алгоритмы, такие как AES-ECB) Поддержка алгоритмов асимметричного шифрования (таких как RSA, ECC и т. д.) Интерфейсы зарезервированы для добавления дополнительных алгоритмов в будущем, например Национальные секретные алгоритмы SM2, SM3 и SM4
  • Конструкция ввода и вывода: Поддерживает строки, потоки байтов в кодировке Base64 и файлы в качестве входных данных. Поддерживает файлы и потоки байтов в кодировке Base64 в качестве вывода. Предоставление функций анализа и проверки сертификатов. Внедрить расчет HMAC для проверки целостности данных.

дизайн взаимодействия

  • Интерфейс командной строки: Разработайте краткий и понятный интерфейс командной строки и предоставьте необходимую оперативную информацию. Поддержка проверки пользовательского ввода и подсказок об ошибках для повышения точности пользовательского ввода.
  • Проверка параметров Проверьте параметры, введенные пользователем, чтобы убедиться в достоверности введенных данных. Предоставьте четкие подсказки об ошибках при неправильном вводе или неверных параметрах.

соображения безопасности

  • Выбор криптобиблиотеки Выберите тщательно протестированную и проверенную криптографическую библиотеку в качестве базовой реализации.
  • Ключ: Предоставляет возможности генерации ключей Обработка ошибок: Правильно обрабатывайте ошибки, которые могут возникнуть в процессе шифрования, чтобы избежать потери или повреждения данных.

будущее расширение

  • Расширение функции: Новые функции и поддержка алгоритмов будут постепенно добавляться на основе отзывов и потребностей пользователей.

Команды, поддерживаемые инструментом

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool --help

Usage: easy_encryption_tool [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  aes         инструмент шифрования и дешифрования aes, поддерживается по умолчанию aes-cbc-256 и aes-gcm-256
  cert-parse  анализировать pem или der сертификат формата
  ecc         eccзнак Проверкаиключинструмент проверки обмена
  hmac        инструмент кода проверки сообщений hmac
  random-str  Генератор случайных строк
  rsa         rsaдобавлять Расшифроватьизнак Проверкаинструмент
  version     Отображение информации о текущей версии и информации о времени выполнения.

Установите автозаполнение easy_encryption_tool

ссылка:Shell Completion

Ручные настройки (на примере zsh)

Язык кода:python
кодКоличество запусков:0
копировать
# ZSH
# 1. Выполните команду ограничить~/.easy_encryption_tool_complete.sh файлом.
_EASY_ENCRYPTION_TOOL_COMPLETE=zsh_source easy_encryption_tool >~/.easy_encryption_tool_complete.sh

# 2. в .zshrc Документы со ссылкой на
#    использовать vim или Другие редакторы открывают ~.zshrc. файл, добавьте в файл следующие операторы, затем сохраните и выйдите
. ~/.easy_encryption_tool_complete.sh

# 3. Сделать конфигурацию доступной в текущей оболочке session Эффективен в
source ~/.zshrc

Создать случайную строку

Поддерживаемые параметры

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool random-str --help
Usage: main.py random-str [OPTIONS]

Options:
  -l, --length INTEGER RANGE  Минимальная длина строки составляет один байт, максимальная длина определяется максимальным целочисленным значением системы.  [default: 32;
                              1<=x<=9223372036854775807]
  -o, --output-file TEXT      Укажите выходной файл. Файл должен иметь разрешения на запись.
  --help                      Show this message and exit.

Вывод непосредственно на стандартный вывод

Язык кода:python
кодКоличество запусков:0
копировать
# -l указывает длину случайной строки до 32 байтов.
❯ easy_encryption_tool random-str -l 32

------ 632aebf88dfe8f93 begin@2024-04-04_15:01:23.987 ------
qBg@G%Tp((@2h81tg@9II7#0Su4`B06$
------ 632aebf88dfe8f93 took 0.049 milli-seconds to execute ------

вывод в файл

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool random-str -l 37 -o test_random

------ 71a2d32b0816349f begin@2024-04-04_15:24:22.476 ------
write to test_random success
------ 71a2d32b0816349f took 0.299 milli-seconds to execute ------

Алгоритм симметричного шифрования AES

Поддерживаемые параметры команды

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool aes --help
Usage: main.py aes [OPTIONS]

Options:
  -m, --mode [cbc|gcm]            aes режим, по умолчанию cbc модель, опционально cbc или gcm модель
                                  [default: cbc]
  -k, --key TEXT                  key по умолчанию 32 Байты, то есть 256 бит, разрешены только видимые символы,
                                  Если длины недостаточно, оно будет автоматически завершено. Если длина превысит, оно будет автоматически перехвачено.  [default:
                                  kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk]
  -v, --iv-nonce TEXT             cbc режим,iv по умолчанию 16 Байты 128 Бит, гсм режим nonce по умолчанию
                                  12 Байты 96 Кусочек,Если длины недостаточно, оно будет автоматически завершено. Если длина превысит, оно будет автоматически перехвачено.  [default:
                                  vvvvvvvvvvvvvvvv]
  -r, --random-key-iv             Следует ли автоматически включать случайные ключи iv/nonce, если случайное значение, то длина ключа по умолчанию 32
                                  байты, iv по умолчаниюдля 16 байт, nonce по умолчаниюдля 12 байт
  -a, --action [encrypt|decrypt]  шифрование(encrypt)или Расшифровать (расшифровать), вывод после шифрования base64 закодированная строка
                                  [default: encrypt]
  -i, --input-data TEXT           входитьданные,То естьшифрованиеили Расшифроватьизданные,шифрованиечаспозволятьвходить:нить、 base64
                                  Закодированные данные, путь к файлу, разрешенный при расшифровке: base64. Закодированные данные, путь к файлу
                                  [required]
  -e, --is-base64-encoded         если -i/--input-data Стоимость base64 Если он был закодирован, вам необходимо взять его с собой. -e
                                  Параметр, -e и -f взаимоисключающие  [default: False]
  -f, --is-a-file                 если -i/--input-data Значение представляет собой файл, необходимо принести -f
                                  Параметр указывает, что файл в данный момент необходимо обработать, -e и -f взаимоисключающие
  -l, --input-limit INTEGER       входить Максимальная длина контента в единицах MB,по умолчаниюдля 1 МБ в -i Эффективно, когда это не файл
                                  [default: 1]
  -o, --output-file TEXT          Укажите выходной файл. Если файл указан при входе, его необходимо указать при выводе.
  -t, --gcm-tag TEXT              gcm При расшифровке модели этот параметр обязателен
  --help                          Show this message and exit.

Пресеты для клавиш, IV и режимов

  • Режим шифрования: поддерживает только режим CBC и режим GCM. Заполнение данных (Заполнение) принудительно выполняется в соответствии с правилами PKCS#7 во время шифрования.
  • Ключ: По умолчанию — 32 байта, то есть 256 бит. Если его недостаточно, он будет заполнен автоматически. Если превышается, он будет автоматически перехвачен.
  • IV: длина IV по умолчанию составляет 16 байт в режиме CBC, а длина Nonce по умолчанию составляет 12 байт в режиме GCM (4 байта зарезервированы для счетчика, который обрабатывается самим алгоритмом).

Предустановки для ввода данных

Поведение шифрования поддерживает три метода ввода данных:

  • Такие строки, как: привет, мир
  • Поток байтов в кодировке Base64, например: aGVsbG8sd29ybGQK (сгенерированная команда оболочки: echo "hello,world"|base64)
  • Путь к имени файла: ~/data/test_plain.txt

Поведение расшифровки поддерживает два метода ввода данных:

  • Поток байтов в кодировке Base64, например: /hEP3J5KHZgNnCeBD/W5MQ==
  • Путь к имени файла: ~/data/test_cipher.bin

Укажите ключ и IV

Использовать ключ по умолчанию
Язык кода:shell
копировать
# шифрованиеhello,world,ключи iv вседляпо умолчаниюданные
❯ easy_encryption_tool aes -m cbc -a encrypt -i hello,world

------ 15ec713c1b8c0ef3 begin@2024-04-04_15:29:25.203 ------
plain size:11
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
iv:vvvvvvvvvvvvvvvv
cipher size:16
cipher:PcgHm88aPtUjwVx+SDvMqw==
auth_tag_size:0
auth_tag:
------ 15ec713c1b8c0ef3 took 26.874 milli-seconds to execute ------

# Расшифровать привет, мир
❯ easy_encryption_tool aes -m cbc -a decrypt -i PcgHm88aPtUjwVx+SDvMqw== -e

------ fb11b7f46716698e begin@2024-04-04_15:29:40.648 ------
cipher size:16
plain size:11
str plain:hello,world
------ fb11b7f46716698e took 13.754 milli-seconds to execute ------
Используйте случайно сгенерированные ключи
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование -r означает случайныйгенерироватьключи IV
❯ easy_encryption_tool aes -m cbc -a encrypt -i hello,world -r

------ d39dbe0c997a868b begin@2024-04-04_15:29:54.358 ------
plain size:11
key:Ta9M^p)+L1+_L^26!Xmcs6AR2^3p_5FY
iv:9*H`JW(dzpi5HBd0
cipher size:16
cipher:h7lMpOimKxO0zr7AMVsI9w==
auth_tag_size:0
auth_tag:
------ d39dbe0c997a868b took 14.258 milli-seconds to execute ------

# Расшифровать
# -k и -v Значениеuse заключено в кавычки, чтобы предотвратить специальные shell командные символынапример‘&’、«!»
❯ easy_encryption_tool aes -m cbc -a decrypt -i h7lMpOimKxO0zr7AMVsI9w== -e -k 'Ta9M^p)+L1+_L^26!Xmcs6AR2^3p_5FY' -v '9*H`JW(dzpi5HBd0'

------ 1332e834884e2b0e начать@2024-04-04_15:31:06.666 ------
размер шифра: 16
простой размер: 11
ул. равнина: привет, мир
------ Выполнение 1332e834884e2b0e заняло 15,691 миллисекунды ------
Использовать указанный ключ
Он будет заполнен автоматически, если длина ключа или iv окажется недостаточной.
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование,этотчас key(1234) и iv(1234) Недостаточно долго
❯ easy_encryption_tool aes -m cbc -a encrypt -i hello,world -k 1234 -v 4321

------ c5abaa3af64a5f6c begin@2024-04-04_15:31:34.231 ------
plain size:11
key:1234g6Z0GE$Z@ybb^IIb3FN5Ux%BE=00
iv:4321nJ4j*Nud(yH4
cipher size:16
cipher:dHJKRtSi8KsCe6ZFltF0kA==
auth_tag_size:0
auth_tag:
------ c5abaa3af64a5f6c took 14.648 milli-seconds to execute ------
                
# Расшифровать
❯ easy_encryption_tool aes -m cbc -a decrypt -i dHJKRtSi8KsCe6ZFltF0kA== -e -k '1234g6Z0GE$Z@ybb^IIb3FN5Ux%BE=00' -v '4321nJ4j*Nud(yH4'

------ 7c2018bd08e58a63 begin@2024-04-04_15:32:16.014 ------
cipher size:16
plain size:11
str plain:hello,world
------ 7c2018bd08e58a63 took 14.343 milli-seconds to execute ------
Если ключ или IV слишком длинные, они будут автоматически перехвачены.
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование,этотчасключи iv Длина слишком длинная
❯ easy_encryption_tool aes -m cbc -a encrypt -i hello,world -k 12345678901234567890123456789012abcde -v 1234567890123456abcde

------ 8ff4bd52df0a0865 begin@2024-04-04_15:32:31.104 ------
plain size:11
key:12345678901234567890123456789012
iv:1234567890123456
cipher size:16
cipher:wOXlD3Ie7xiQh81aR8N1tQ==
auth_tag_size:0
auth_tag:
------ 8ff4bd52df0a0865 took 13.849 milli-seconds to execute ------

# Расшифровать
❯ easy_encryption_tool aes -m cbc -a decrypt -i wOXlD3Ie7xiQh81aR8N1tQ== -e -k 12345678901234567890123456789012 -v 1234567890123456

------ 50ea907cc74207ad begin@2024-04-04_15:32:46.937 ------
cipher size:16
plain size:11
str plain:hello,world
------ 50ea907cc74207ad took 13.690 milli-seconds to execute ------

Укажите простой текст

Введите строку в виде обычного текста
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool aes -m cbc -a encrypt -i hello,world

------ e6dc33dc9ca747d0 begin@2024-04-04_15:33:05.505 ------
plain size:11
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
iv:vvvvvvvvvvvvvvvv
cipher size:16
cipher:PcgHm88aPtUjwVx+SDvMqw==
auth_tag_size:0
auth_tag:
------ e6dc33dc9ca747d0 took 14.098 milli-seconds to execute ------
Введите поток байтов в кодировке Base64 в виде открытого текста.
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование -e Данные, указывающие на то, что вхождение прошло base64 кодирование,шифрованиеили Расшифроватьчас Нужно сначаладанные Делать base64 декодирование
❯ easy_encryption_tool aes -m cbc -a encrypt -i 9H8InkmnUjgVHC8elQxThUSmzkO0tuGlP0Si4X1kmoK7azOIDoFnt8dXjeWNGb+dc7qiEBPi+jymax4i+24KBQ== -e

------ fc5b00c0a79ff88e begin@2024-04-04_15:33:17.585 ------
plain size:64
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
iv:vvvvvvvvvvvvvvvv
cipher size:80
cipher:ZHq7uJQjkx/2Bm5ZmrcuS/5c/s/qayDVcuWZmvsTle1RAUKyv0dvGhOVYEINmL35eSMVoT3Bx/M6lU9NGCuiM5OxyJ2VcuB30dp8GVZg0oQ=
auth_tag_size:0
auth_tag:
------ fc5b00c0a79ff88e took 14.382 milli-seconds to execute ------
Входной файл в виде обычного текста
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool aes -m cbc -a encrypt -i ./test_data/test_plain.txt -f -o ./tmp_cipher.bin

------ 1d5fb25a63f1ed4d begin@2024-04-04_15:33:57.461 ------
input file size:64
cipher size:80
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
iv:vvvvvvvvvvvvvvvv
auth_tag_size:0
auth_tag:
------ 1d5fb25a63f1ed4d took 14.859 milli-seconds to execute ------

Укажите зашифрованный текст

Введите поток байтов в кодировке Base64 в виде зашифрованного текста.
Если расшифрованный открытый текст можно напечатать непосредственно в виде строки
Язык кода:python
кодКоличество запусков:0
копировать
# открытый текст hello,world
❯ easy_encryption_tool aes -m cbc -a decrypt -i PcgHm88aPtUjwVx+SDvMqw== -e

------ 2b6a86223a0ba102 begin@2024-04-04_15:35:26.995 ------
cipher size:16
plain size:11
str plain:hello,world
------ 2b6a86223a0ba102 took 13.676 milli-seconds to execute ------
Если расшифрованный зашифрованный текст не может быть напечатан в виде строки
Язык кода:python
кодКоличество запусков:0
копировать
# Сам открытый текст представляет собой поток байтов.
❯ easy_encryption_tool aes -m cbc -a decrypt -i ZHq7uJQjkx/2Bm5ZmrcuS/5c/s/qayDVcuWZmvsTle1RAUKyv0dvGhOVYEINmL35eSMVoT3Bx/M6lU9NGCuiM5OxyJ2VcuB30dp8GVZg0oQ= -e

------ d399aa241aa6b691 begin@2024-04-04_15:35:39.781 ------
cipher size:80
plain size:64
b64 encoded plain:9H8InkmnUjgVHC8elQxThUSmzkO0tuGlP0Si4X1kmoK7azOIDoFnt8dXjeWNGb+dc7qiEBPi+jymax4i+24KBQ==
------ d399aa241aa6b691 took 13.869 milli-seconds to execute ------
Входной файл как зашифрованный текст
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool aes -m cbc -a decrypt -i ./tmp_cipher.bin -f -o ./tmp_plain.txt

------ 1f27fb444d1139b2 begin@2024-04-04_15:36:03.267 ------
input file size:80
decrypt ./tmp_cipher.bin success
write to ./tmp_plain.txt
plain size:64
------ 1f27fb444d1139b2 took 14.259 milli-seconds to execute ------

# Размер файла соответствует, а содержимое соответствует
❯ ll ./tmp_plain.txt ./test_data/test_plain.txt
-rw-r--r--  1 xxxx  staff  64 Apr  2 21:06 ./test_data/test_plain.txt
-rw-r--r--  1 xxxx  staff  64 Apr  3 10:58 ./tmp_plain.txt
❯ cat tmp_plain.txt ./test_data/test_plain.txt
123456789012345612345678901234561234567890123456123456789012345
123456789012345612345678901234561234567890123456123456789012345

Использовать режим GCM

Значения по умолчанию на уровне кода

В коде данные фиксированного контекста по умолчанию используются в качестве данных проверки для зашифрованного открытого текста.

Язык кода:python
кодКоличество запусков:0
копировать
        if mode == aes_gcm_mode:
            self.__auth_data = json.dumps({
                'mode': mode, # Значение gcm
                'obj': 'aes_operator',
            }).encode(encoding = 'utf-8')
            if action == aes_encrypt_action:
                self.__aes_gcm_obj = Cipher(algorithms.AES(self.__key), modes.GCM(self.__iv), backend = default_backend())
                self.__aes_gcm_enc_op = self.__aes_gcm_obj.encryptor()
                self.__aes_gcm_enc_op.authenticate_additional_data(self.__auth_data)
Шифрование и дешифрование строк
Язык кода:python
кодКоличество запусков:0
копировать
# gcmмодельшифрование
❯ easy_encryption_tool aes -m gcm -a encrypt -i hello,world

------ b8e914a4634acde7 begin@2024-04-04_15:36:39.558 ------
plain size:11
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
iv:vvvvvvvvvvvv
cipher size:16
cipher:TajM7IwxIZIoqHkU87dY7w==
auth_tag_size:16
auth_tag:df8z3ccRyGOQTluw26dIlA==
------ b8e914a4634acde7 took 14.280 milli-seconds to execute ------
Шифровать и дешифровать поток байтов в кодировке Base64.
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool aes -m gcm -a encrypt -i 9H8InkmnUjgVHC8elQxThUSmzkO0tuGlP0Si4X1kmoK7azOIDoFnt8dXjeWNGb+dc7qiEBPi+jymax4i+24KBQ== -e

------ 7781b5bffdcef12b begin@2024-04-04_15:37:05.562 ------
plain size:64
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
iv:vvvvvvvvvvvv
cipher size:80
cipher:0bKoHqq6BMVP2DIPY74Ob2tGi69gVzHSZREJT3DAeCsVU52ykLcfKZIq/GD2PEkCwLLE8o37nvPK9t/pr4LStVy5unAN/EVllIvvopq2pis=
auth_tag_size:16
auth_tag:B1Jp0FuxyNXAOVAvj9S+Ow==
------ 7781b5bffdcef12b took 13.915 milli-seconds to execute ------


# Расшифровать
❯ easy_encryption_tool aes -m gcm -a decrypt -i 0bKoHqq6BMVP2DIPY74Ob2tGi69gVzHSZREJT3DAeCsVU52ykLcfKZIq/GD2PEkCwLLE8o37nvPK9t/pr4LStVy5unAN/EVllIvvopq2pis= -e -t B1Jp0FuxyNXAOVAvj9S+Ow==

------ 5bcc82c4235dcde4 begin@2024-04-04_15:37:17.397 ------
cipher size:80
plain size:64
b64 encoded plain:9H8InkmnUjgVHC8elQxThUSmzkO0tuGlP0Si4X1kmoK7azOIDoFnt8dXjeWNGb+dc7qiEBPi+jymax4i+24KBQ==
------ 5bcc82c4235dcde4 took 13.844 milli-seconds to execute ------
Шифрование и дешифрование файлов
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool aes -m gcm -a encrypt -i ./test_data/test_plain.txt -f -o ./tmp_gcm_cipher.bin

------ 0c4605fe37eb7e4b begin@2024-04-04_15:37:45.621 ------
input file size:64
cipher size:80
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
iv:vvvvvvvvvvvv
auth_tag_size:16
auth_tag:krJchuyaDRYHnu5tsy8UzA==
------ 0c4605fe37eb7e4b took 14.347 milli-seconds to execute ------

# Расшифровать
❯ easy_encryption_tool aes -m gcm -a decrypt -i ./tmp_gcm_cipher.bin -f -o tmp_gcm_plain.txt -t krJchuyaDRYHnu5tsy8UzA==

------ d181cab086ebaeaa begin@2024-04-04_15:38:00.709 ------
input file size:80
decrypt ./tmp_gcm_cipher.bin success
write to tmp_gcm_plain.txt
plain size:64
------ d181cab086ebaeaa took 14.397 milli-seconds to execute ------
Значение тега важно для расшифровки
Язык кода:python
кодКоличество запусков:0
копировать
# gcmмодельнормальный Расшифровать
❯ easy_encryption_tool aes -m gcm -a decrypt -i TajM7IwxIZIoqHkU87dY7w== -e -t df8z3ccRyGOQTluw26dIlA==

------ 86699527d1227e39 begin@2024-04-04_15:38:22.322 ------
cipher size:16
plain size:11
str plain:hello,world
------ 86699527d1227e39 took 13.987 milli-seconds to execute ------

# Не передано gcm tag Сообщим об ошибке
❯ easy_encryption_tool aes -m gcm -a decrypt -i TajM7IwxIZIoqHkU87dY7w== -e

------ 11c1531f0fd5b7a8 begin@2024-04-04_15:38:32.957 ------
expected a gcm tag(16 Bytes)
------ 11c1531f0fd5b7a8 took 0.030 milli-seconds to execute ------

# Сдал неправильно tag встреча Расшифроватьнеудача
❯ easy_encryption_tool aes -m gcm -a decrypt -i TajM7IwxIZIoqHkU87dY7w== -e -t H7n7OzKgQyHL86zbnQ0r+g==

------ 90580b5c3649a1ba begin@2024-04-04_15:38:46.823 ------
decrypt TajM7IwxIZIoqHkU87dY7w== failed:
------ 90580b5c3649a1ba took 14.030 milli-seconds to execute ------

Часто используемые проверки легальности параметров

-m параметр режима
Язык кода:python
кодКоличество запусков:0
копировать
easy_encryption_tool aes -m abc -a encrypt -i 1234
Usage: main.py aes [OPTIONS]
Try 'main.py aes --help' for help.

Error: Invalid value for '-m' / '--mode': 'abc' is not one of 'cbc', 'gcm'.
-параметр действия
Язык кода:python
кодКоличество запусков:0
копировать
easy_encryption_tool aes -m cbc -a abc -i 1234
Usage: main.py aes [OPTIONS]
Try 'main.py aes --help' for help.

Error: Invalid value for '-a' / '--action': 'abc' is not one of 'encrypt', 'decrypt'.
-я входные параметры
Строка превышает лимит
Язык кода:python
кодКоличество запусков:0
копировать
# Установите здесь максимальный предел в 0 МБ,То есть шифрование не допускается,Это зарезервировано намеренно
❯ easy_encryption_tool aes -m cbc -a encrypt -i 1234 -l 0

------ 5ce766f36cc28968 начало@2024-04-04_15:39:42.675 ------
данные превышают максимальный предел в байтах, ограниченный: 0 байт, теперь: 4 байта
------ Выполнение команды 5ce766f36cc28968 заняло 0,023 миллисекунды ------
Недопустимые данные в кодировке Base64.
Язык кода:python
кодКоличество запусков:0
копировать
# Произвольно построенная строка
❯ easy_encryption_tool aes -m cbc -a encrypt -i qwert -e

------ 4844fa0e0939482d begin@2024-04-04_15:39:53.597 ------
invalid b64 encoded data:qwert
------ 4844fa0e0939482d took 0.044 milli-seconds to execute ------

# В данных base64 отсутствуют символы (правильный: ZUD3MJT3ohiimrryNW7jBw==)
❯ easy_encryption_tool aes -m cbc -a encrypt -i ZUD3MJT3ohiimrryNW7jBw -e

------ 22301b388db43f9d begin@2024-04-04_15:40:05.092 ------
invalid b64 encoded data:ZUD3MJT3ohiimrryNW7jBw
------ 22301b388db43f9d took 0.036 milli-seconds to execute ------
Файл не читается
Язык кода:python
кодКоличество запусков:0
копировать
# Создайте файл и сделайте его доступным для чтения только пользователю root.
sudo touch test_plain
sudo chmod 400 test_plain
# Просмотр файлов
ll test_plain
-r--------  1 root  staff  0 Apr  3 11:29 test_plain

# использовать Другие пользователи запускают команды для доступа
easy_encryption_tool aes -m cbc -a encrypt -i test_plain -f
test_plain may not exist or may be unreadable
------ aes_command took 0.076 milli-seconds to execute ------
Файл не может быть записан
Язык кода:python
кодКоличество запусков:0
копировать
# Проверка разрешения на запись файла не удалась
easy_encryption_tool aes -m cbc -a encrypt -i  tmp_gcm_plain.txt -f -o test_plain

tmp_gcm_plain.txt opened in mode rb success
test_plain may not exist or may not writable
tmp_gcm_plain.txt closed success
------ aes_command took 0.126 milli-seconds to execute ------
Параметры -e и -f являются взаимоисключающими
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool aes -m cbc -a encrypt -i test_plain -f -e

------ 75998f7a4a1364f6 begin@2024-04-04_15:40:30.038 ------
the input data cannot be used as both a file and base64 encoded data
------ 75998f7a4a1364f6 took 0.026 milli-seconds to execute ------
При шифровании или расшифровке файла необходимо указать имя выходного файла.
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование Не указывать выходной файл
❯ easy_encryption_tool aes -m gcm -a encrypt -i ./test_data/test_plain.txt -f

------ 3564874090cf12d5 begin@2024-04-04_15:40:55.522 ------
need a output file specified and writable
------ 3564874090cf12d5 took 0.074 milli-seconds to execute ------

# Расшифровать не указывает выходной файл
❯ easy_encryption_tool aes -m gcm -a decrypt -i ./test_data/test_plain.txt -f -t df8z3ccRyGOQTluw26dIlA==

------ c3dee26a5649a077 begin@2024-04-04_15:41:07.541 ------
need a output file specified and writable
------ c3dee26a5649a077 took 0.084 milli-seconds to execute ------

Код проверки HMAC

Поддерживаемые параметры команды

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool hmac --help
Использование: main.py hmac [ОПЦИИ]

Параметры:
  -i, --input-data ТЕКСТ вход в систему,позволятьвходить:нить、 base64 Закодированные данные, путь к файлу  [required]
  -e, --is-base64-encoded         если -i/--input-data Стоимость base64 Если он был закодирован, вам необходимо взять его с собой. -e
                                  Параметр, -e и -f взаимоисключающие  [default: False]
  -f, --is-a-file                 если -i/--input-data Значение представляет собой файл, необходимо принести -f
                                  Параметр указывает, что файл в данный момент необходимо обработать, -e и -f взаимоисключающие
  -h, --hash-alg [sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512]
                                  Хэш-алгоритм  [default: sha256]
  -k, --key TEXT                  key по умолчанию Значение 32 Байты, то есть 256 бит, разрешены только видимые символы  [default:
                                  kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk]
  -r, --random-key                лиавтоматическийгенерироватьслучайныйключ,еслиавтоматический Генерировать случайные ключинопо умолчанию 32 длина в байтах
  --help                          Show this message and exit.

Пресеты для входных данных и клавиш

  • Входные данные поддерживают три метода: обычную текстовую строку, поток байтов в кодировке Base64 и файл.
  • Ключ по умолчанию 32 байт,поддерживать Генерировать случайные ключи (длина вынуждена 32 байт)

Укажите ключ

Использовать ключ по умолчанию
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool hmac -i hello,world

------ 1daa56484b0a4733 begin@2024-04-04_15:41:52.566 ------
data size:11Bytes
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
hmac:dcd5f3d53661434856c4fb1f76072a22c5fb2526bfd8713aa5041cc43aab7675
------ 1daa56484b0a4733 took 0.029 milli-seconds to execute ------
Собственный Укажите ключ
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool hmac -i hello,world -k 1234

------ 990d2a043f6fb90a begin@2024-04-04_15:42:03.420 ------
data size:11Bytes
key:1234
hmac:96dd6f73018a6d1911d77a906bc41a6aaae760331eb367ca7134a6b85dbbfdcb
------ 990d2a043f6fb90a took 0.025 milli-seconds to execute ------
Генерировать случайные ключи
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool hmac -i hello,world -r

------ 8acd4791042aae7c begin@2024-04-04_15:42:14.518 ------
data size:11Bytes
key:6+98I^y4IsiGGj0p!(1^O+iuoH%CO!s5
hmac:f8f9931c074fd30c9fe60c31beb87600bfd3b51960e91f34d765d339aa9981f8
------ 8acd4791042aae7c took 0.057 milli-seconds to execute ------

Укажите ввод

входная строка
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool hmac -i hello,world

------ 7ad6f172e3498e2a begin@2024-04-04_15:42:33.801 ------
data size:11Bytes
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
hmac:dcd5f3d53661434856c4fb1f76072a22c5fb2526bfd8713aa5041cc43aab7675
------ 7ad6f172e3498e2a took 0.028 milli-seconds to execute ------
Входной поток байтов в кодировке Base64
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool hmac -i krJchuyaDRYHnu5tsy8UzA== -e

------ 7f8694414df48f4e begin@2024-04-04_15:42:46.859 ------
data size:16Bytes
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
hmac:276e565d1e8a65b38463e124c45c60b00e01a8a623995aae360d1035e0d58923
------ 7f8694414df48f4e took 0.035 milli-seconds to execute ------
входной файл
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool hmac -i ./test_data/test_plain.txt -f

------ d9f4d5072cc8d6ee begin@2024-04-04_15:42:57.326 ------
file size:64Bytes
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
hmac:5b0ea206c45019e090246cea031ca3a267bab15d39bd53491272473aef75d8b0
------ d9f4d5072cc8d6ee took 0.102 milli-seconds to execute ------

Укажите алгоритм хеширования

Язык кода:python
кодКоличество запусков:0
копировать
# поддерживается hash Список:
# [sha224 | sha256 | sha384 | sha512 | sha3_224 | sha3_256 | sha3_384 | sha3_512]

# использовать sha512
❯ easy_encryption_tool hmac -i ./test_data/test_plain.txt -f -h sha512

------ 440b99b2f7479972 begin@2024-04-04_15:43:10.055 ------
file size:64Bytes
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
hmac:3c41a94f15c6517e5774d0878268e33c12d9170136c8d9c972f9294324aca61ee2bc4e0f1c7b4a59525ba40f3ccf7b94ebb1de74881ae85023a187e8c1626e1b
------ 440b99b2f7479972 took 0.107 milli-seconds to execute ------

# использоватьsha3_256
❯ easy_encryption_tool hmac -i ./test_data/test_plain.txt -f -h sha3_256

------ c48755f9b49e99b3 begin@2024-04-04_15:43:23.256 ------
file size:64Bytes
key:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
hmac:25494b6effa8df3ad1bff777892e08ceccf3fbaa181608d006400b8da3fef853
------ c48755f9b49e99b3 took 0.087 milli-seconds to execute ------

Асимметричный ключ RSA

Поддерживаемые команды

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool rsa --help
Usage: main.py rsa [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  decrypt
  encrypt
  generate
  sign
  verify

Создать пару ключей

Поддерживаемые параметры
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool rsa generate --help
Usage: main.py rsa generate [OPTIONS]

Options:
  -s, --size [2048|3072|4096]  количество ключевых цифр  [default: 2048]
  -e, --encoding [pem|der]     Ключевой формат  [default: pem]
  -f, --file-name TEXT         Префикс имени файла выходного ключа верен. Когда данные окончательно записаны, файл будет создан, и к нему будет добавлен суффикс имени файла.  [default:
                               demo; required]
  -p, --password TEXT          Пароль закрытого ключа. Для использования частного ключа требуется ввести правильный пароль.
  -r, --random-password        Является ли значение случайным паролем для закрытого ключа?,если давай -r логотип,нослучайныйгенерировать32байтпароль
  --help                       Show this message and exit.
Создано по умолчанию
Язык кода: python
копировать
# Длина ключа составляет 2048 бит, а закрытый ключ не имеет пароля.
❯ easy_encryption_tool rsa generate -f test

------ 6b89fd023be2d70e begin@2024-04-04_15:48:44.313 ------
generate test_rsa_public.pem/test_rsa_private.pem success
------ 6b89fd023be2d70e took 134.487 milli-seconds to execute ------
Укажите длину и укажите пароль
Язык кода:python
кодКоличество запусков:0
копировать
# ключ формата pem, закрытый ключ без пароля
❯ easy_encryption_tool rsa generate -f test_no_pwd_pem -s 4096 -e pem

------ 7d68ecefd4536a1c begin@2024-04-04_15:50:00.393 ------
generate test_no_pwd_pem_rsa_public.pem/test_no_pwd_pem_rsa_private.pem success
------ 7d68ecefd4536a1c took 560.056 milli-seconds to execute ------

# ключ формата pem, закрытый ключ с паролем
❯ easy_encryption_tool rsa generate -f test_pwd_pem -s 4096 -e pem -p 1234567890

------ f036eed08d4188e6 begin@2024-04-04_15:51:20.417 ------
private key password:1234567890
generate test_pwd_pem_rsa_public.pem/test_pwd_pem_rsa_private_cipher.pem success
------ f036eed08d4188e6 took 341.474 milli-seconds to execute ------

# ключ формата, закрытый ключ без пароля
❯ easy_encryption_tool rsa generate -f test_no_pwd_der -s 4096 -e der

------ e152e62cc8ff4080 begin@2024-04-04_15:51:53.004 ------
generate test_no_pwd_der_rsa_public.der/test_no_pwd_der_rsa_private.der success
------ e152e62cc8ff4080 took 620.032 milli-seconds to execute ------

# ключ формата, закрытый ключ с паролем
❯ easy_encryption_tool rsa generate -f test_pwd_der -s 4096 -e der -p 1234567890

------ 9b08b9054b7642cd begin@2024-04-04_15:52:04.209 ------
private key password:1234567890
generate test_pwd_der_rsa_public.der/test_pwd_der_rsa_private_cipher.der success
------ 9b08b9054b7642cd took 1108.390 milli-seconds to execute ------
Укажите длину и случайным образом сгенерируйте пароль
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool rsa generate -f test -s 4096 -r

------ e3eba04fda53c701 begin@2024-04-04_15:53:14.570 ------
private key password:4)H(iipM9=qnUV!!16LZ3)n&YGQE@v04
generate test_rsa_public.pem/test_rsa_private_cipher.pem success
------ e3eba04fda53c701 took 300.131 milli-seconds to execute ------ 

Шифрование и дешифрование

Поддерживаемые параметры
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool rsa encrypt --help
Usage: main.py rsa encrypt [OPTIONS]

Options:
  -f, --public-key TEXT           Путь к файлу открытого ключа  [required]
  -i, --input-data TEXT           входить данные, которые могут быть прямой строкой или
                                  Данные в кодировке Base64, данные в кодировке Base64 должны быть помечены -c  [required]
  -e, --encoding [pem|der]        Ключевой формат  [default: pem]
  -c, --b64-encoded               данные о входе base64 закодированный
  -l, --input-limit INTEGER       входить Максимальная длина контента в единицах MB,по умолчаниюдля 1MB,Нетверносказать Не подходит для прямогошифрованиеслишком долгоизданные
                                  [default: 1]
  -m, --mode [oaep|pkcs1v15]      шифрованиечасизнаполнениемодель  [default: oaep; required]
  -h, --hash-mode [sha256|sha384|sha512]
                                  Этот параметр доступен только при значении -m. oaep эффективен, когда  [default: sha256]
  --help                          Show this message and exit.

 # Расшифровать
 ❯ easy_encryption_tool rsa decrypt --help
Usage: main.py rsa decrypt [OPTIONS]

Options:
  -f, --private-key TEXT          Путь к файлу закрытого ключа  [required]
  -i, --input-data TEXT           данные зашифрованного текста вхождения, Данные должны быть закодированы в формате Base64.  [required]
  -e, --encoding [pem|der]        Ключевой формат  [default: pem]
  -m, --mode [oaep|pkcs1v15]      шифрованиечасизнаполнениемодель  [default: oaep; required]
  -h, --hash-mode [sha256|sha384|sha512]
                                  Этот параметр доступен только при значении -m. oaep эффективен, когда  [default: sha256]
  -p, --password TEXT             Пароль закрытого ключа. Для использования частного ключа требуется ввести правильный пароль.
  --help                          Show this message and exit.
Шифрование и дешифрование с использованием ключей PEM.
Закрытый ключ не требует пароля
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool rsa encrypt -e pem -f ./test_data/test_no_pwd_pem_public.pem -i hello,world

------ 18869a5ba5f11a4f begin@2024-04-04_15:55:10.501 ------
pub key size:4096
padding mode:oaep-sha256
cipher:pQlqgAyKEdrjcdRPe90uWHIJv781VD1X0xxxxxxxxxxxxxx
------ 18869a5ba5f11a4f took 15.731 milli-seconds to execute ------

# Расшифровать
❯ easy_encryption_tool rsa decrypt -e pem -f ./test_data/test_no_pwd_pem_private.pem -i pQlqgAyKEdrjcdxxxxxxxxxxxxxx

------ 197c89cd0b631ce0 begin@2024-04-04_15:55:40.536 ------
private key password:
key size:4096
padding mode:oaep-sha256
origin plain:hello,world
------ 197c89cd0b631ce0 took 338.602 milli-seconds to execute ------
Закрытый ключ требует пароля
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool rsa encrypt -e pem -f ./test_data/test_pwd_pem_public.pem -i hello,world

------ e1cde686b573fb50 begin@2024-04-04_15:56:04.554 ------
pub key size:4096
padding mode:oaep-sha256
cipher:pF06oJgMvzJ8WUpxxxxxxxxxxx
------ e1cde686b573fb50 took 15.492 milli-seconds to execute ------

# Расшифровать -p Укажите пароль
❯ easy_encryption_tool rsa decrypt -e pem -f ./test_data/test_pwd_pem_private_cipher.pem -i pF06oJgMvzJ8WUphoYqaccLhxxxxxxxx -p 1234567890

------ cb0ebbe7b572b665 begin@2024-04-04_15:56:25.496 ------
private key password:1234567890
key size:4096
padding mode:oaep-sha256
origin plain:hello,world
------ cb0ebbe7b572b665 took 338.788 milli-seconds to execute ------
Шифрование и дешифрование с использованием ключей DER
Закрытый ключ не требует пароля
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool rsa encrypt -e der -f ./test_data/test_no_pwd_der_public.der -i hello,world

------ 10e4568e22050ecc begin@2024-04-04_15:56:47.705 ------
pub key size:4096
padding mode:oaep-sha256
cipher:V0g9TwUetAKZOl6xwe9SL7ra1xxxxxxxxxx
------ 10e4568e22050ecc took 14.792 milli-seconds to execute ------


# Расшифровать
❯ easy_encryption_tool rsa decrypt -e der -f ./test_data/test_no_pwd_der_private.der -i V0g9TwUetAKZOl6xwe9SL7ra1P3Kxxxxxxxxxx

------ ff1efcc52f4fc05e begin@2024-04-04_15:57:10.634 ------
private key password:
key size:4096
padding mode:oaep-sha256
origin plain:hello,world
------ ff1efcc52f4fc05e took 348.368 milli-seconds to execute ------
Закрытый ключ требует пароля
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool rsa encrypt -e der -f ./test_data/test_pwd_der_public.der -i hello,world

------ d59dc4bec2be5592 begin@2024-04-04_15:57:28.114 ------
pub key size:4096
padding mode:oaep-sha256
cipher:XNNpZfpu7ZjnI1HnH/KN9xxxxxxxxx
------ d59dc4bec2be5592 took 14.696 milli-seconds to execute ------

# Расшифровать -p Укажите пароль
❯ easy_encryption_tool rsa decrypt -e der -f ./test_data/test_pwd_der_private_cipher.der -i XNNpZfpuxxxxxxxxx -p 1234567890

------ 806b307f230908a4 begin@2024-04-04_15:57:47.873 ------
private key password:1234567890
key size:4096
padding mode:oaep-sha256
origin plain:hello,world
------ 806b307f230908a4 took 343.988 milli-seconds to execute ------
Шифрование и дешифрование байтовых потоков открытого текста в кодировке Base64.
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool rsa encrypt -e pem -f ./test_data/test_pwd_pem_public.pem -i krJchuyaDRYHnu5tsy8UzA== -c

------ 29fa5af7e9f84f15 begin@2024-04-04_15:58:07.029 ------
pub key size:4096
padding mode:oaep-sha256
cipher:QiztiJ21bVsNf4DyPhzDAR/E24Xqexxxxxxxxx
------ 29fa5af7e9f84f15 took 15.584 milli-seconds to execute ------

# Расшифровать -p Укажите пароль
❯ easy_encryption_tool rsa decrypt -e pem -f ./test_data/test_pwd_pem_private_cipher.pem -i QiztiJ21bVsNf4DyPhzDAR/E24Xqe94P398JLDakFl3LDhOA3I/XHY3v3R0GBNRrrMPtUorGHxCVmJNqxxxxxx -p 1234567890

------ d1f6350d34acf14e begin@2024-04-04_15:58:25.431 ------
private key password:1234567890
key size:4096
padding mode:oaep-sha256
b64 encoded plain:krJchuyaDRYHnu5tsy8UzA==
------ d1f6350d34acf14e took 344.681 milli-seconds to execute ------
Настройки режима шифрования
Режим ОАЭП
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool rsa encrypt -e pem -f ./test_data/test_no_pwd_pem_public.pem -i hello,world -m oaep

------ 5d4c86b12cac7641 begin@2024-04-04_15:58:41.153 ------
pub key size:4096
padding mode:oaep-sha256
cipher:LmYOuAO+zP1qCjivxxxxxxxxxx
------ 5d4c86b12cac7641 took 14.201 milli-seconds to execute ------

# Расшифровать
❯ easy_encryption_tool rsa decrypt -e pem -f test_data/test_no_pwd_pem_private.pem -m oaep -i LmYOuAO+zP1qxxxxxx

------ 9f151c4c9f56af86 begin@2024-04-04_15:59:05.700 ------
private key password:
key size:4096
padding mode:oaep-sha256
origin plain:hello,world
------ 9f151c4c9f56af86 took 346.121 milli-seconds to execute ------
Режим PKCS1v15
Язык кода:python
кодКоличество запусков:0
копировать
# шифрование
❯ easy_encryption_tool rsa encrypt -e pem -f ./test_data/test_no_pwd_pem_public.pem -i hello,world -m pkcs1v15

------ 875086be5059242c begin@2024-04-04_15:59:19.282 ------
pub key size:4096
padding mode:pkcs1v15
cipher:i1hVnoQsWAQK4sftuvg08xxxxxxx
------ 875086be5059242c took 14.024 milli-seconds to execute ------

# Расшифровать
❯ easy_encryption_tool rsa decrypt -e pem -f test_data/test_no_pwd_pem_private.pem -m pkcs1v15 -i i1hVnoQsWAQK4sftuvgxxxxxxxx

------ d5096f43a1dd5d65 begin@2024-04-04_15:59:37.216 ------
private key password:
key size:4096
padding mode:pkcs1v15
origin plain:hello,world
------ d5096f43a1dd5d65 took 348.221 milli-seconds to execute ------

Подпись и проверка

Поддерживаемые параметры
Язык кода:python
кодКоличество запусков:0
копировать
# знак
❯ easy_encryption_tool rsa sign --help
Usage: main.py rsa sign [OPTIONS]

Options:
  -f, --private-key TEXT          Путь к файлу закрытого ключа  [required]
  -e, --encoding [pem|der]        Ключевой формат  [default: pem]
  -m, --mode [pss|pkcs1v15]       Заполнение модели знака  [default: pss; required]
  -h, --hash-mode [sha256|sha384|sha512]
                                  знакчасиз Хэш-алгоритм  [default: sha256]
  -p, --password TEXT             Пароль закрытого ключа. Для использования частного ключа требуется ввести правильный пароль.
  -i, --input-data TEXT           Данные, которые необходимо обработать  [required]
  -c, --b64-encoded               данные о входе base64 закодированный
  --help                          Show this message and exit.

# Проверка
❯ easy_encryption_tool rsa verify --help
Usage: main.py rsa verify [OPTIONS]

Options:
  -f, --public-key TEXT           Путь к файлу открытого ключа  [required]
  -e, --encoding [pem|der]        Ключевой формат  [default: pem]
  -m, --mode [pss|pkcs1v15]       Заполнение модели знака  [default: pss; required]
  -h, --hash-mode [sha256|sha384|sha512]
                                  знакчасиз Хэш-алгоритм  [default: sha256]
  -i, --input-data TEXT           Данные, которые необходимо обработать  [required]
  -c, --b64-encoded               данные о входе base64 закодированный
  -s, --signature TEXT            base64 закодированныйиззнакценить
  --help                          Show this message and exit.
PSS-режим
Язык кода:python
кодКоличество запусков:0
копировать
# знак -p Укажите пароль
❯ easy_encryption_tool rsa sign -e der -f ./test_data/test_pwd_der_private_cipher.der -m pss -i hello,world -p 1234567890

------ 9238d47e0e2636f1 begin@2024-04-04_16:01:35.674 ------
key size:4096
signature:74bd0807319b4b7c58dc40eaf58efee8xxxxxxxx
----------------
base64 encoded:dL0IBzGbS3xY3EDq9xxxxxxxx
mode:pss-sha256
------ 9238d47e0e2636f1 took 348.185 milli-seconds to execute ------

# Проверка
❯ easy_encryption_tool rsa verify -e der -f ./test_data/test_pwd_der_public.der -m pss -s dL0IBzGbS3xY3EDqxxxxxxxxx -i hello,world

------ 8e8b995bbc527e67 begin@2024-04-04_16:02:01.136 ------
verify success
key size:4096
mode:pss-sha256
------ 8e8b995bbc527e67 took 14.193 milli-seconds to execute ------
Режим PKCS1v15
Язык кода:python
кодКоличество запусков:0
копировать
# знак -p Укажите пароль
❯ easy_encryption_tool rsa sign -e pem -f ./test_data/test_pwd_pem_private_cipher.pem -i hello,world -p 1234567890

------ c12c59d278e72bb6 begin@2024-04-04_16:02:15.070 ------
key size:4096
signature:8590c16fd7349f7da4b845xxxxxxx
----------------
base64 encoded:hZDBb9c0n32kuEWrVsD9exxxxxxxx
mode:pss-sha256
------ c12c59d278e72bb6 took 343.034 milli-seconds to execute ------

# Проверка
❯ easy_encryption_tool rsa verify -e pem -f ./test_data/test_pwd_pem_public.pem -i hello,world -s hZDBb9c0n32kuEWrVsD9eGzQxxxxxxxxxx

------ 8151e7568131a1c6 begin@2024-04-04_16:02:36.431 ------
verify success
key size:4096
mode:pss-sha256
------ 8151e7568131a1c6 took 13.708 milli-seconds to execute ------

Эллиптическая кривая ECC

Поддерживаемые команды

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc --help
Usage: main.py ecc [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  ecdh
  generate
  sign
  verify

Создать пару ключей

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc generate --help
Usage: main.py ecc generate [OPTIONS]

Options:
  -c, --curve [secp256r1|secp384r1|secp521r1|secp256k1]
                                  ecc Тип эллиптической кривой  [default: secp256k1]
  -e, --encoding [pem|der]        Ключевой формат  [default: pem]
  -f, --file-name TEXT            Префикс имени файла выходного ключа верен. Когда данные окончательно записаны, файл будет создан, и к нему будет добавлен суффикс имени файла.  [default:
                                  demo; required]
  -p, --password TEXT             Пароль закрытого ключа. Для использования частного ключа требуется ввести правильный пароль.
  -r, --random-password           Является ли значение случайным паролем для закрытого ключа?,если давай -r логотип,нослучайныйгенерировать32байтпароль
  --help                          Show this message and exit.
Создано по умолчанию
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc generate

------ d6b0cebd74d64b57 begin@2024-04-04_16:07:59.720 ------
generate demo_ecc_public.pem/demo_ecc_private.pem success
------ d6b0cebd74d64b57 took 17.039 milli-seconds to execute ------
Укажите эллиптическую кривую и укажите пароль
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc generate -c secp384r1 -p 1234567890

------ e852fd0a2d84d39f begin@2024-04-04_16:08:46.706 ------
private key password:1234567890
generate demo_ecc_public.pem/demo_ecc_private_cipher.pem success
------ e852fd0a2d84d39f took 16.710 milli-seconds to execute ------
Укажите эллиптическую кривую и случайным образом сгенерируйте пароль
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc generate -c secp384r1 -r

------ 073bd5585937e6fd begin@2024-04-04_16:09:28.102 ------
private key password:)N)y&4dq=ODg`339uE`7*@A9Gl0eVs3Z
generate demo_ecc_public.pem/demo_ecc_private_cipher.pem success
------ 073bd5585937e6fd took 16.721 milli-seconds to execute ------

Обмен ключами ECDH

Поддерживаемые параметры
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc ecdh --help
Usage: main.py ecc ecdh [OPTIONS]

Options:
  -a, --alice-pub-key TEXT    Путь к вашему собственному файлу открытого ключа: ./alice_public.pem  [required]
  -k, --alice-pri-key TEXT    Путь к вашему файлу закрытого ключа: ./alice_private.pem  [required]
  -p, --password TEXT         ты Собственныйиззакрытый ключпароль,еслисоздаватьчас Пароль установлен,Затем виспользоватьзакрытый ключчаснуждатьсявходитьправильныйпароль
  -b, --bob-pub-key TEXT      Путь к файлу открытого ключа верен следующий: ./bob_public.pem  [required]
  -e, --encoding [pem|der]    Ключевой формат  [default: pem]
  -l, --length INTEGER RANGE  производнаяключиздлина,по умолчанию 32 байт,Диапазон длины[16] -- 64]  [default: 32;
                              16<=x<=64]
  -s, --salt TEXT             Значение соли, используемое для повышения безопасности производного ключа. Одно и то же значение соли должно быть указано с обеих сторон.  [default:
                              hello,world1234567890!@#$%^&*()_+{}:";<>?/;
                              required]
  -c, --context TEXT          Контекстная информация, используемая для повышения безопасности производного ключа. Обе стороны должны предоставить одни и те же контекстные данные.  [default: ecc
                              handshake context data; required]
  --help                      Show this message and exit.
Создайте пару ключей для Алисы и Боба.
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc generate -f alice -p 1234567890

------ f4815ee66aa727b2 begin@2024-04-04_16:11:03.966 ------
private key password:1234567890
generate alice_ecc_public.pem/alice_ecc_private_cipher.pem success
------ f4815ee66aa727b2 took 17.763 milli-seconds to execute ------

❯ easy_encryption_tool ecc generate -f bob -p 1234567890

------ 76e72cdd07cb5c32 begin@2024-04-04_16:11:26.201 ------
private key password:1234567890
generate bob_ecc_public.pem/bob_ecc_private_cipher.pem success
------ 76e72cdd07cb5c32 took 16.373 milli-seconds to execute ------
Алиса получает симметричный ключ, общий с Бобом
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc ecdh -a ./alice_ecc_public.pem -k ./alice_ecc_private_cipher.pem -p 1234567890 -b ./bob_ecc_public.pem -l 64 -s alice-bob -c key-alice-bob

------ 8235537a02e647d4 begin@2024-04-04_16:14:48.686 ------
curve name:secp256k1
derived key:u+UNGIzrPbLRVlTSixl8fgd3SgLuGeQrwSI4Irs1tpSVivmTxYLTOUm/o1pvqPLuOGVA8D3iLdUGLEE72Wo1QQ==
length:64
------ 8235537a02e647d4 took 18.166 milli-seconds to execute ------
Симметричный ключ, полученный Бобом и предоставленный Алисой
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc ecdh -a ./bob_ecc_public.pem -k ./bob_ecc_private_cipher.pem -p 1234567890 -b ./alice_ecc_public.pem -l 64 -s alice-bob -c key-alice-bob

------ d50d7d254d02104c begin@2024-04-04_16:15:39.570 ------
curve name:secp256k1
derived key:u+UNGIzrPbLRVlTSixl8fgd3SgLuGeQrwSI4Irs1tpSVivmTxYLTOUm/o1pvqPLuOGVA8D3iLdUGLEE72Wo1QQ==
length:64
------ d50d7d254d02104c took 16.998 milli-seconds to execute ------

Подпись и проверка

Поддерживаемые параметры
Язык кода:python
кодКоличество запусков:0
копировать
# знак
❯ easy_encryption_tool ecc sign --help
Usage: main.py ecc sign [OPTIONS]

Options:
  -f, --private-key TEXT          Путь к файлу закрытого ключа  [required]
  -e, --encoding [pem|der]        Ключевой формат  [default: pem]
  -h, --hash-mode [sha256|sha384|sha512|sha3-224|sha3-256|sha3-384|sha3-512]
                                  знакчасиз Хэш-алгоритм  [default: sha256]
  -p, --password TEXT             Пароль закрытого ключа,еслигенерироватьчас Пароль установлен Затем виспользоватьзакрытый ключчаснуждатьсявходитьправильныйпароль
  -i, --input-data TEXT           Данные, которые необходимо обработать  [required]
  -c, --b64-encoded               данные о входе base64 закодированный
  --help                          Show this message and exit.

# Проверка
❯ easy_encryption_tool ecc verify --help
Usage: main.py ecc verify [OPTIONS]

Options:
  -f, --public-key TEXT           Путь к файлу открытого ключа  [required]
  -e, --encoding [pem|der]        Ключевой формат  [default: pem]
  -h, --hash-mode [sha256|sha384|sha512|sha3-224|sha3-256|sha3-384|sha3-512]
                                  знакчасиз Хэш-алгоритм  [default: sha256]
  -i, --input-data TEXT           Данные, которые необходимо обработать  [required]
  -c, --b64-encoded               данные о входе base64 закодированный
  -s, --signature TEXT            base64 закодированныйиззнакценить
  --help                          Show this message and exit.
Создать пару ключей
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc generate -c secp384r1 -p 1234567890 -e der

------ 3a40beeed28cffa4 begin@2024-04-04_16:17:49.172 ------
private key password:1234567890
generate demo_ecc_public.der/demo_ecc_private_cipher.der success
------ 3a40beeed28cffa4 took 16.821 milli-seconds to execute ------
знак
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc sign -f ./demo_ecc_private_cipher.der -e der -h sha3-512 -p 1234567890 -i aGVsbG8sd29ybGQK -c

------ dbc12fab8422ba0f begin@2024-04-04_16:18:57.578 ------
curve name:secp384r1
key size:384
signature:30640230243bba7exxxxxx
mode:ECDSA
------ dbc12fab8422ba0f took 17.265 milli-seconds to execute ------
Проверка
Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool ecc verify -f ./demo_ecc_public.der -e der -h sha3-512 -i aGVsbG8sd29ybGQK -c -s MGQCMCQ7un7AqV9670hoZzKCtwIXKFpmeuUs5eQ8avWzPorb2oa74qfZ+ZW5NNA46uViTAIwbEfa7QaeUbsSwnTBMhnBc+1LWcb3bKqwT1C0NZ8/JcD6TatMF8uIiIdn835MjPmT

------ d1c74d3acc46413b begin@2024-04-04_16:20:09.177 ------
curve name:secp384r1
verify success
key size:384
mode:ECDSA
------ d1c74d3acc46413b took 15.220 milli-seconds to execute ------

Парсинг и проверка сертификатов

Разобрать сертификат и проверить подпись

Язык кода:python
кодКоличество запусков:0
копировать
 ❯ easy_encryption_tool cert-parse -f test_certs/baidu.com.cer

------ 27f6aa95a2461345 begin@2024-04-06_15:02:26.887 ------
------- verify signature: -------
verify cert signature success
ca issuer:http://secure.globalsign.com/cacert/gsrsaovsslca2018.crt

------- basic info: -------
version: v3-2
serial_number: 26585094245224241434632730821
signature_algorithm: PKCS #1 RSA Encryption
signature_hash_algorithm: sha256
issuer: GlobalSign nv-sa|GlobalSign RSA OV SSL CA 2018|BE
valid_before: 20230706015106Z
valid_after: 20240806015105Z
subject: Beijing Baidu Netcom Science Technology Co., Ltd|CN|baidu.com
public_key_bits: 2048
public_key_type: 6(6:RSA|116:DSA|408:EC|28:DH)
------ 27f6aa95a2461345 took 83.634 milli-seconds to execute ------

Разобрать полное содержимое сертификата

Язык кода:python
кодКоличество запусков:0
копировать
❯ easy_encryption_tool cert-parse -f baidu.com.cer -v

------ 247b96f11927fe0f begin@2024-04-06_15:04:26.023 ------
------- verify signature: -------
verify cert signature success
ca issuer:http://secure.globalsign.com/cacert/gsrsaovsslca2018.crt

------- basic info: -------
version: v3-2
serial_number: 26585094245224241434632730821
signature_algorithm: PKCS #1 RSA Encryption
signature_hash_algorithm: sha256
issuer: GlobalSign nv-sa|GlobalSign RSA OV SSL CA 2018|BE
valid_before: 20230706015106Z
valid_after: 20240806015105Z
subject: Beijing Baidu Netcom Science Technology Co., Ltd|CN|baidu.com
public_key_bits: 2048
public_key_type: 6(6:RSA|116:DSA|408:EC|28:DH)

------- verbose info: -------
public_key_exponent: ('10001',)
public_key_modules: ('BB04BB84765807B45A8854E06A56BCE5D48D3E1EB928E0D7018F382B41B2597DF0AC27B426241438FE4CEA3B4951F7E95B40F73FA6C8DA0F026E258B4791B82E9E0021191D1800FCDE04FD2679395DF290BC809DA87CB2918989D8402FE5D2A7F35E6D482BC51F0AB1E08E8C76FFBCD1670AD249D609EE260302F3CCCDEA8AD531A82D8F03FD5EFCE43AC68967994CCE986DFA840D0E538BE66352C59B4AA9ABA32235990DEE19FF9B2DF5A477F2EC1080F4AB82B9D17E361F0E9F9B19A0F5C357DD88BBCEE1909C3F4BBADD3AA941B3DD864DC2C2B7E8FF3713C0048943443811E6A396F70922212F2C4E0E7EE5D85CBB00445BAFDEE4B3B0F03CB63845495D',)
public_key_fingerprints: 43A4C24005AA3F8B7E7AAE35C6729A52025DACF5AAC86E4BF8D8B6633321A9D6
signature: 0X195A675043B1AC7A93A86818728B407EA675DEAC21FCC94116204BF38C0BB94745AEF85D79F64335260198F0B9863E2901F1DFB072B5AE78D2DF61B678678AC9779ADEE0E4412F9C1EE53B7C973F422FADE3497F9D2B0288906925030114B9B5CB0F593D2D973D02D55190690C811022DAC651EF480CD24FDE61F26A8715A56D718E3702A2850F1E1975A3802E6A1AA2028C2FECBD3D81033F8AC0A0E6B40E0857CB001C8AB71B8F38719A8DC0710C3FBCD4BE569DF718C1AABEE4DF1A86E2626F23863054782D471FB4AD052973249814A019C002FD90904E625CE84D3189C3E88B9E73593B9891CA47A5055BC51E8F85390ECEB5260A804E9F084A11491363
certificate_fingerprints: D8:AA:2D:80:6C:57:1F:B6:2E:D4:87:48:41:90:92:3F:93:24:F0:31:9C:FF:FE:DF:7B:62:1F:13:4E:6B:C1:00
extension_count: 10
extensions_detail: {
    "x509.AuthorityInformationAccess": {
        "oid": "1.3.6.1.5.5.7.1.1",
        "critical": false,
        "value": {
            "caIssuers": "http://secure.globalsign.com/cacert/gsrsaovsslca2018.crt",
            "OCSP": "http://ocsp.globalsign.com/gsrsaovsslca2018"
        }
    },
    "x509.BasicConstraints": {
        "oid": "2.5.29.19",
        "critical": false,
        "value": "<BasicConstraints(ca=False, path_length=None)>"
    },
    "x509.KeyUsage": {
        "oid": "2.5.29.15",
        "critical": true,
        "value": "<KeyUsage(digital_signature=True, content_commitment=False, key_encipherment=True, data_encipherment=False, key_agreement=False, key_cert_sign=False, crl_sign=False, encipher_only=False, decipher_only=False)>"
    },
    "x509.SubjectKeyIdentifier": {
        "oid": "2.5.29.14",
        "critical": false,
        "value": "<SubjectKeyIdentifier(digest=b'\\xeds\\xab\\xf9 \\xbez\\x19\\x9fY\\x1f\\xb2\\x9f\\xf2?/?\\x91\\x84\\x12')>"
    },
    "x509.SubjectAlternativeName": {
        "oid": "2.5.29.17",
        "critical": false,
        "value": "<SubjectAlternativeName(<GeneralNames([<DNSName(value='baidu.com')>, <DNSName(value='baifubao.com')>, <DNSName(value='www.baidu.cn')>, <DNSName(value='www.baidu.com.cn')>, <DNSName(value='mct.y.nuomi.com')>, <DNSName(value='apollo.auto')>, <DNSName(value='dwz.cn')>, <DNSName(value='*.baidu.com')>, <DNSName(value='*.baifubao.com')>, <DNSName(value='*.baidustatic.com')>, <DNSName(value='*.bdstatic.com')>, <DNSName(value='*.bdimg.com')>, <DNSName(value='*.hao123.com')>, <DNSName(value='*.nuomi.com')>, <DNSName(value='*.chuanke.com')>, <DNSName(value='*.trustgo.com')>, <DNSName(value='*.bce.baidu.com')>, <DNSName(value='*.eyun.baidu.com')>, <DNSName(value='*.map.baidu.com')>, <DNSName(value='*.mbd.baidu.com')>, <DNSName(value='*.fanyi.baidu.com')>, <DNSName(value='*.baidubce.com')>, <DNSName(value='*.mipcdn.com')>, <DNSName(value='*.news.baidu.com')>, <DNSName(value='*.baidupcs.com')>, <DNSName(value='*.aipage.com')>, <DNSName(value='*.aipage.cn')>, <DNSName(value='*.bcehost.com')>, <DNSName(value='*.safe.baidu.com')>, <DNSName(value='*.im.baidu.com')>, <DNSName(value='*.baiducontent.com')>, <DNSName(value='*.dlnel.com')>, <DNSName(value='*.dlnel.org')>, <DNSName(value='*.dueros.baidu.com')>, <DNSName(value='*.su.baidu.com')>, <DNSName(value='*.91.com')>, <DNSName(value='*.hao123.baidu.com')>, <DNSName(value='*.apollo.auto')>, <DNSName(value='*.xueshu.baidu.com')>, <DNSName(value='*.bj.baidubce.com')>, <DNSName(value='*.gz.baidubce.com')>, <DNSName(value='*.smartapps.cn')>, <DNSName(value='*.bdtjrcv.com')>, <DNSName(value='*.hao222.com')>, <DNSName(value='*.haokan.com')>, <DNSName(value='*.pae.baidu.com')>, <DNSName(value='*.vd.bdstatic.com')>, <DNSName(value='*.cloud.baidu.com')>, <DNSName(value='click.hm.baidu.com')>, <DNSName(value='log.hm.baidu.com')>, <DNSName(value='cm.pos.baidu.com')>, <DNSName(value='wn.pos.baidu.com')>, <DNSName(value='update.pan.baidu.com')>])>)>"
    },
    "x509.CRLDistributionPoints": {
        "oid": "2.5.29.31",
        "critical": false,
        "value": "<CRLDistributionPoints([<DistributionPoint(full_name=[<UniformResourceIdentifier(value='http://crl.globalsign.com/gsrsaovsslca2018.crl')>], relative_name=None, reasons=None, crl_issuer=None)>])>"
    },
    "x509.ExtendedKeyUsage": {
        "oid": "2.5.29.37",
        "critical": false,
        "value": "<ExtendedKeyUsage([<ObjectIdentifier(oid=1.3.6.1.5.5.7.3.1, name=serverAuth)>, <ObjectIdentifier(oid=1.3.6.1.5.5.7.3.2, name=clientAuth)>])>"
    },
    "x509.FreshestCRL": {
        "ERROR": "x509.ExtensionNotFound",
        "oid": "",
        "value": {},
        "critical": false
    },
    "x509.NameConstraints": {
        "ERROR": "x509.ExtensionNotFound",
        "oid": "",
        "value": {},
        "critical": false
    },
    "x509.PolicyConstraints": {
        "ERROR": "x509.ExtensionNotFound",
        "oid": "",
        "value": {},
        "critical": false
    }
}
------ 247b96f11927fe0f took 76.036 milli-seconds to execute ------
boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.