Подтвердить что ты не робот

Шифровать строку с помощью командной строки openssl

У меня есть 16-байтовый символ, который я хотел бы зашифровать, используя openssl, в 16-байтную зашифрованную строку.

Эта зашифрованная строка (в человекообразном формате) затем должна быть предоставлена ​​пользователю, который будет ее использовать, и строка будет расшифрована до первоначальной 16-байтовой формы для сравнения и аутентификации. Может кто-нибудь, пожалуйста, скажите мне, как это возможно с помощью командной строки openssl.

Спасибо заранее.

4b9b3361

Ответ 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 

чтобы перечислить все доступные шифры.