Расшифруйте текст с помощью OpenSSL, используя только ключ и соль - PullRequest
2 голосов
/ 29 января 2020

Я бы хотел расшифровать текст с помощью клавиши из 32 символов и соли из командной строки в моем MacOS. Я зашифровал его в Windows с помощью программы. Но всякий раз, когда я пытаюсь расшифровать его из командной строки, я не могу и получаю ошибку.

echo -n PuYNZO+SLqFo6g97gxKr2uAPRUph/sZgaJ3T5YIBPIc= | openssl enc -d -a -aes-256-cbc -K TheTestKeyUsedIs32CharactersLong -S 53616c7455736564 -iv 0 -p
hex string is too short, padding with zero bytes to length
hex string is too short, padding with zero bytes to length
non-hex digit
invalid hex key value

Когда я пытаюсь зашифровать

100836

в MacOS, это дает мне совершенно другую строку.

U2FsdGVkX19TYWx0VXNlZA4AWDWo5nzi8p5pYyAeUMg =

с помощью следующей команды:

openssl enc -aes-256-cbc -a -S 53616c7455736564 -iter 5 -k TheTestKeyUsedIs32CharactersLong -in input.txt -out openssl_output.txt

из приложения, которое я использую в Windows * * *

100836 преобразуется в PuYNZO + SLqFo6g97gxKr2uAPRUph / sZgaJ3T5YIBPIc =

  • Мой солевой текст SaltUsed
  • Мой 32-битный символьный ключ TheTestKeyUsedIs32CharactersLong
  • Ввод PuYNZO + SLqFo6g97gxKr2uAPRUph / sZgaJ3T5YIBPIc =
  • Должен быть расшифрован в 100836 1039 *1039* Но результат совершенно неожиданный.

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

    Я также попробовал ввести ключ в шестнадцатеричных числах, но ответ все равно был неверным и не соответствовал ожиданиям.

1 Ответ

1 голос
/ 29 января 2020

@ Васиф и я потратили некоторое время на отладку в чате и, в конце концов, полагаем, что, скорее всего, это проблема совместимости между OpenSSL 1.1.1.d на Windows и OpenSSL 1.1.1.b на macOS.

Мы прошли через ряд тестов и перестановок с использованием (Key, IV) кортежей в шестнадцатеричном виде, с использованием паролей, с солями и без солей, и в конечном итоге наше тестирование сводилось к простой проверке.

Используя openssl enc -a -aes-256-cbc -pass pass:MYPASSWORD -p -in input.txt на Windows, мы получили:

salt=E70092FEBA619144 
key=29631452F8C259DFE6FD8E9372EC4B20392395F36B7A0B11769CEBEA987E90A0 
iv =93BF2E94462A43B23EF585C0F4B3F1A8 
U2FsdGVkX1/nAJL+umGRRGi3ybIPFXf7qrgov7SyXnI=

Используя openssl aes-256-cbc -d -a -pass pass:MYPASSWORD -in cipherText.txt (which contains 'U2FsdGVkX1/nAJL+umGRRGi3ybIPFXf7qrgov7SyXnI=' на Ma c, мы получили:

4593573484:error:06FFF064:digital envelope routines:CRYPTO_internal:bad decrypt

Несмотря на неудачный тест, блоки Ma c и Windows успешно зашифрованы и расшифрованы локально.

Странно, но это похоже на несовместимость версий.

...