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
時間が関連しているかどうかはわかりませんが、変更された変数はそれだけです。
何か案は?ありがとう
パスワードを復号化するためにしばらく待った後に発生するエラーで、メソッドに「有効期限がある」とのことですが、これはランダムに生成されたsalt
が時間とともに変化するためです。 (例:毎日異なります)
暗号化する場合、暗号化されたパスワードの最初の文字は、ソルトで暗号化するときに使用されるソルトです。復号化には同じソルトを使用する必要があります。
MacOS /以前では、ソルトなしで暗号化しようとしている場合は注意してください。 opensslバージョンでは、-nosalt
keywordを使用する必要があります。 openssl
は、デフォルトでソルトを生成して使用します。
したがって、ソルトなしで暗号化するには、次のことを行う必要があります。
echo P@$$Word| openssl enc -aes-128-cbc -a -nosalt -pass pass:pass_key
ただし、パスワードを保存する場合は、パスワードを復号化して候補パスワードと比較することはお勧めできません。後でスクリプトを比較するためにスクリプトを復号化しません:
パスワードを比較するには、パスワードを暗号化して同じソルト(ソルトを使用している場合)で確認し、暗号化された文字列を比較して一致するかどうかを確認します。
システム間でパスワードを転送し、保存しない場合は、salt
の使用はそれほど重要ではありませんが、より安全に保つのに役立つことに注意してください。
ただし、暗号化の強度に関して強いセキュリティニーズがある場合、OpenSSLは暗号化の強度が弱いことで知られており、GnuPGはopenSSLよりも暗号化に強いです。
$ echo P@$$Word
P@74266Word
$ echo 'P@$$Word'
P@$$Word
常に文字列を引用することを忘れないでください。また、$1
などの二重引用符の変数展開:
$ ls
a_file
$ variable="a*"
$ echo $variable
a_file
$ echo "$variable"
a*
また、パスワードを比較するには、復号化されたパスワードではなく、暗号化されたパスワードを比較する必要があります。ソルトを使用する場合は、元のパスワードの暗号化に使用したのと同じソルトを使用する必要があります。 OpenSSLは、これを暗号化されたデータの最初の8バイトに格納します。