文字列の暗号化/暗号化解除中にopensslエラーが発生しました。

文字列の暗号化/暗号化解除中にopensslエラーが発生しました。

bashスクリプトを使用してパスワードを暗号化して復号化する必要があります。このために私はopenssl

ホスト間でパスワードを移動するため、復号化が必要です。

奇妙なことに、暗号化には有効期限があるようです。

暗号化(bashスクリプトではありません):

echo P@$$word| openssl enc -aes-128-cbc -a -salt -pass pass:pass_key

復号化(bashスクリプトから):

dec_password=$(echo -n $1 | openssl enc -aes-128-cbc -a -d -salt -pass pass:pass_key)

暗号化してスクリプトを実行すると、完全に機能します。
しかし、暗号化を行い、翌日、スクリプトを実行して復号化エラーにより失敗します。

error reading input file

時間が関係しているかどうかはわかりませんが、それが変更される唯一の変数です。

どんなアイデアがありますか?ありがとう

ベストアンサー1

パスワードを解読するためにしばらく待ってから発生するエラーと、その方法に「有効期限があるようだ」と言及された理由は、生成された乱数が時間の経過saltとともに変化するためです。 (例:毎日異なります)

暗号化時に暗号化されたパスワードの最初の文字は、暗号化に使用されるソルトです。復号化時にも同じソルトを使用する必要があります。

以前のバージョンの MacOS/? で無ソルト暗号化を実行する場合は注意してください。 opensslバージョンでは-nosaltキーワードを使用する必要があります。opensslデフォルトでは salt が生成され使用されます。

したがって、ソルトレス暗号化を実行するには、次のことが必要です。

echo P@$$word| openssl enc -aes-128-cbc -a -nosalt -pass pass:pass_key

しかし、パスワードを保存するときにパスワードを復号化し、後でスクリプトを比較するのは悪い習慣です。あなたはそれを解読しません:

パスワードを比較する方法は、パスワードを暗号化して同じソルト(ソルトを使用している場合)で確認し、暗号化された文字列を比較して一致することを確認することです。

パスワードを保存するのではなく、システム間でパスワードを渡すためのものであれば、それを使用することはsaltそれほど重要ではありませんが、セキュリティを維持するのに役立ちます。

ただし、暗号強度の強力なセキュリティ要件がある場合、OpenSSLは暗号強度が弱いのに対し、GnuPGはopenSSLよりも暗号強度が強くなります。

おすすめ記事