2012-04-11 29 views
21

Mam 16-bajtową postać, którą chciałbym zaszyfrować używając openssl do 16-bajtowego zaszyfrowanego ciągu.Szyfruj ciąg za pomocą linii poleceń openssl

Ten zaszyfrowany ciąg (w formacie czytelnym dla człowieka) musi następnie zostać dostarczony użytkownikowi, który go użyje, a ciąg znaków zostanie odszyfrowany do oryginalnej 16-bajtowej postaci w celu porównania i uwierzytelnienia. Czy ktoś mógłby mi powiedzieć, jak to byłoby możliwe z poleceniem openssl.

Z góry dziękuję.

+1

Jest mało prawdopodobne, że zaszyfrowanie z 16 bajtów na 16 bajtów spowoduje, że będzie on czytelny dla człowieka. –

+2

+1 ponowne otwarcie. Jest w 100% oczywiste, o co tu chodzi. Ale naprawię to: jak zaszyfrować ciąg za pomocą komendy 'openssl'? Nie jest to oczywiste zadanie, a użytkownik podaje kontekst swojej prośby. –

+0

@ G-Wiz: * "jak zaszyfrować ciąg znaków za pomocą komendy openssl" * - czy jest to temat na Stack Overflow? To * nie * wydaje się być związane z programowaniem. To brzmi jak prośba o pomoc na polecenie, które byłoby bardziej odpowiednie dla [Superużytkownika] (http://superuser.com/). – jww

Odpowiedz

20

Oto jeden sposób, aby zaszyfrować ciąg z openssl w linii poleceń (musi wprowadzić hasło dwa razy):

echo -n "aaaabbbbccccdddd" | openssl enc -e -aes-256-cbc -a -salt 
enter aes-256-cbc encryption password: 
Verifying - enter aes-256-cbc encryption password: 

Oto co wyjście wygląda następująco:

U2FsdGVkX1/6LATntslD80T2HEIn3A0BqxarNfwbg31D2kI00dYbmBo8Mqt42PIm 

EDIT: Według mojej wiedzy , nie możesz kontrolować liczby bajtów. Możesz kodować kod b64 lub hex, ale to już wszystko. Ponadto, jeśli chcesz zapisać ten ciąg do pliku zamiast standardowego, użyj opcji -out.

+0

Dzięki, ale czy w jakikolwiek inny sposób mogę zaszyfrować ciąg 16 znaków i wygenerować zaszyfrowany ciąg 16 znaków w systemie Linux za pomocą wiersza poleceń –

+0

Dlaczego wynik musi wynosić dokładnie 16 bajtów? Dlaczego to ma znaczenie? – 01100110

+0

Dlaczego używasz '-es-256-cbc' zamiast' -es-256'? Jaka jest różnica? – Lucio

5

mam charakter 16 bajtów, które chciałbym do szyfrowania przy użyciu OpenSSL do 16 bajtów zaszyfrowanych ciąg [w ludzkiej formie czytelnej]

wierzę szukasz Format Zachowanie szyfrowania. Myślę, że zastrzeżenie to musisz zacząć od 16-bajtowego czytelnego tekstu. Phillip Rogaway ma referat na temat technologii: Synopsis of Format-Preserving Encryption. Jest w tym dużo papieru i nie można go dopasować do pojedynczego akapitu w Stack Overflow.

Jeśli możesz zacząć od krótszego łańcucha i użyć trybu strumieniowego, takiego jak OCB, OFB lub CTR, możesz zakodować końcowy ciąg Base64, aby wynik był 16-bajtowy i czytelny dla człowieka. Base64 rozwija się z szybkością 3 → 4 (3 nie zakodowane rozszerzenia do 4 zakodowanych), więc potrzebujesz krótszego ciągu długości 12 znaków, aby uzyskać 16 czytelnych postaci.

O ile mi wiadomo, nie ma narzędzi wiersza polecenia, które wykonują to samodzielnie. Możesz użyć OpenSSL w linii poleceń z AES/CTR i przeprowadź przez niego polecenie base64. Poniższy zbliża się, ale zaczyna się z 11 znaków (a nie 12):

$ echo 12345678901 | openssl enc -e -base64 -aes-128-ctr -nopad -nosalt -k secret_password 
cSTzU8+UPQQwpRAq 

Ponadto, naprawdę potrzeba zrozumienia TE -k opcję (i -K dla tej sprawy), i jak to wynika klucza więc możesz to zrobić poza poleceniem OpenSSL (w razie potrzeby).

1

spróbować

$ echo "a_byte_character" | openssl enc -base64 

i masz 100 + szyfr Rodzaje

-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     
+1

Pamiętaj, że "Szyfrowanie w trybie XTS nie jest obsługiwane przez narzędzie enc." –

1

Spróbuj tego:

echo 'foo' | openssl aes-256-cbc -a -salt 
echo 'U2FsdGVkX1/QGdl4syQE8bLFSr2HzoAlcG299U/T/Xk=' | openssl aes-256-cbc -a -d -salt 

Run

openssl list-cipher-commands 

, aby wyświetlić wszystkie dostępne szyfry.

Powiązane problemy