Шифровать строку с помощью командной строки openssl
У меня есть 16-байтовый символ, который я хотел бы зашифровать, используя openssl, в 16-байтную зашифрованную строку.
Эта зашифрованная строка (в человекообразном формате) затем должна быть предоставлена пользователю, который будет ее использовать, и строка будет расшифрована до первоначальной 16-байтовой формы для сравнения и аутентификации. Может кто-нибудь, пожалуйста, скажите мне, как это возможно с помощью командной строки openssl.
Спасибо заранее.
Ответы
Ответ 1
Здесь один способ зашифровать строку с помощью openssl в командной строке (необходимо ввести пароль дважды):
echo -n "aaaabbbbccccdddd" | openssl enc -e -aes-256-cbc -a -salt
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
Вот как выглядит результат:
U2FsdGVkX1/6LATntslD80T2HEIn3A0BqxarNfwbg31D2kI00dYbmBo8Mqt42PIm
Изменить: Насколько я знаю, вы не можете контролировать количество байтов. Вы можете b64 или hex закодировать его, но об этом. Кроме того, если вы хотите сохранить эту строку в файле, а не в stdout, используйте параметр -out.
Ответ 2
У меня есть 16-байтовый символ, который я хотел бы зашифровать, используя openssl, в 16-байтную зашифрованную строку [в формате для чтения]
Я считаю, что вы ищете форматирование с сохранением шифрования. Я думаю, что оговорка заключается в том, что вы должны начать с 16-байтной читаемой человеком строки. Филлип Рогавей имеет документ о технологиях: Краткое описание
Шифрование с поддержкой форматирования. Там много для бумаги, и она не может вписаться в один абзац "Переполнение стека".
Если вы можете начать с более короткой строки и использовать режим потоковой передачи, такой как OCB, OFB или CTR, то вы можете Base64 закодировать финальную строку, чтобы результат был 16-байтным и удобочитаемым человеком. Base64 расширяется со скоростью 3 → 4 (3 некодированных расширений до 4-х кодированных), поэтому для достижения 16 человекочитаемых символов вам потребуется более короткая строка длиной 12 символов.
Насколько я знаю, нет инструментов командной строки, которые делают это изначально. Вы можете использовать OpenSSL в командной строке с AES/CTR и передать его через команду base64
. Следующее приближается, но начинается с 11 символов (а не 12):
$ echo 12345678901 | openssl enc -e -base64 -aes-128-ctr -nopad -nosalt -k secret_password
cSTzU8+UPQQwpRAq
Кроме того, вам действительно нужно понять параметр te -k
(и -k
, если на то пошло), и как он выводит ключ, чтобы вы могли сделать это за пределами команды OpenSSL (при необходимости).
Ответ 3
попробуйте это
$ echo "a_byte_character" | openssl enc -base64
и у вас есть более 100 типов шифров.
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-gcm -aes-128-ofb -aes-128-xts
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ctr -aes-192-ecb
-aes-192-gcm -aes-192-ofb -aes-256-cbc
-aes-256-cfb -aes-256-cfb1 -aes-256-cfb8
-aes-256-ctr -aes-256-ecb -aes-256-gcm
-aes-256-ofb -aes-256-xts -aes128
-aes192 -aes256 -bf
-bf-cbc -bf-cfb -bf-ecb
-bf-ofb -blowfish -camellia-128-cbc
-camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8
-camellia-128-ecb -camellia-128-ofb -camellia-192-cbc
-camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8
-camellia-192-ecb -camellia-192-ofb -camellia-256-cbc
-camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8
-camellia-256-ecb -camellia-256-ofb -camellia128
-camellia192 -camellia256 -cast
-cast-cbc -cast5-cbc -cast5-cfb
-cast5-ecb -cast5-ofb -des
-des-cbc -des-cfb -des-cfb1
-des-cfb8 -des-ecb -des-ede
-des-ede-cbc -des-ede-cfb -des-ede-ofb
-des-ede3 -des-ede3-cbc -des-ede3-cfb
-des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ofb
-des-ofb -des3 -desx
-desx-cbc -id-aes128-GCM -id-aes192-GCM
-id-aes256-GCM -rc2 -rc2-40-cbc
-rc2-64-cbc -rc2-cbc -rc2-cfb
-rc2-ecb -rc2-ofb -rc4
-rc4-40 -rc4-hmac-md5 -seed
-seed-cbc -seed-cfb -seed-ecb
-seed-ofb
Ответ 4
Попробуйте следующее:
echo 'foo' | openssl aes-256-cbc -a -salt
echo 'U2FsdGVkX1/QGdl4syQE8bLFSr2HzoAlcG299U/T/Xk=' | openssl aes-256-cbc -a -d -salt
Запустить
openssl list-cipher-commands
чтобы перечислить все доступные шифры.