В настоящее время я пишу небольшой скрипт, который хранит зашифрованный пароль в файле конфигурации и расшифровывает его, когда ему нужно использовать пароль. Я знаю, что это не самый безопасный способ, и он должен сделать его только «нечитаемым» для людей. Я зашифровал свой пароль с помощью:
echo PasswordToEncrypt | openssl enc -aes-256-cbc -a -salt -pass pass:PasswordForEncryptAndDecrypt
Теперь я получил свой зашифрованный пароль и попытался его расшифровать, и он отлично работает. Но после того, как я попытался расшифровать пароль на другом компьютере, он больше не может его расшифровать. Кроме того, если я снова зашифрую пароль, он будет выглядеть иначе, чем зашифрованный пароль на первом компьютере.
Мой вопрос: есть ли способ зашифровать и расшифровать пароль с помощью openssl с одинаковым результатом на разных компьютерах? Чтобы я мог зашифровать пароль на компьютере А и расшифровать его на компьютере Б?
Ваша рабочая теория состоит в том, что OpenSSL может расшифровывать только те данные, которые были зашифрованы на той же машине? Это не тот случай. Это, несомненно, ошибка ваших скриптов. Тот факт, что он работает на одной машине, не является гарантией правильности скрипта.
Если вы зашифруете файл и расшифруете его на другом компьютере, расшифрованные данные будут такими же. В противном случае шифрование становится бесполезным. Я думаю, вы видите другой вывод, потому что забыли указать опцию -md
.
Чтобы зашифровать:
$ echo TEST | openssl enc -aes-256-cbc -md md5 -salt -pass pass:my_password > enc.bin
И расшифровать:
$ cat enc.bin | openssl enc -d -aes-256-cbc -md md5 -pass pass:my_password
TEST
Просто чтобы дать вам возможность использовать ключи:
$ openssl genrsa -out key.priv 4096
$ openssl rsa -in key.priv -pubout -out key.pub
$ echo TEST | openssl enc -aes-256-cbc -md sha256 -salt -pass file:key.pub > tmp.bin
$ cat tmp.bin | openssl enc -d -aes-256-cbc -md sha256 -pass file:key.pub > tmp.txt
TEST
Может быть проблема в том, что я зашифровал его в последней версии Ubuntu и попытался расшифровать на более старой версии raspberry pi 2 с помощью raspian? Я где-то читал, что другая версия OpenSSL может вызвать проблемы?
Скорее всего проблема в этом. Например, параметр -md
меняется с md5
на sha256
. В последних версиях OpenSSL (1.1.1) требуется добавить -iter 1000 -pbkdf2
, что не будет работать для 1.1.0. Решение сработало для вас?
С опцией -md
вы устанавливаете дайджест сообщения. Если вы шифруете без опции -md
, в настоящее время по умолчанию используется sha256
. В более старых версиях по умолчанию используется md5
. Это разные несовместимые хэш-функции, которые приводят к ошибке bad decrypt
.
«Также, если я снова зашифрую пароль, он будет выглядеть иначе, чем зашифрованный пароль на первом компьютере». Это нормально. Даже если вы сделаете шифрование дважды на одном компьютере, результат будет другим. Это не связано с вашей проблемой.