openssl コマンドで暗号化する際に結果が冪等になるようにする方法

結論

オプション -nosalt を付与する。

具体例

1. -nosalt を付与しない場合

一見同じ結果に見えますが、全て異なっています。

$ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar
U2FsdGVkX19a4H6vBEvUMPTyd+Q7/27pFzaPQctnCfs=

$ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar
U2FsdGVkX185H8E7L8WsVniwiJ3GvRImdiv3shuooj0=

$ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar
U2FsdGVkX1/6b22prbaq0g2/KN0ROK1fxB8cYPtPEPU=

2. -nosalt を付与した場合

$ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar -nosalt
6/9Uo+v1TK/NbZ2BO5yPtw==

$ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar -nosalt
6/9Uo+v1TK/NbZ2BO5yPtw==

$ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar -nosalt
6/9Uo+v1TK/NbZ2BO5yPtw==

冪等にしたい動機

冪等にしたいのは(もちろん)diff が出るようにしたいからです。現実に運用するとなると一手間かかりますが、秘匿値を Git 管理のもとで取り扱いたいときには冪等な暗号化(復号化)は有用かと思います*1

*1:ただし本当にまずいものはそもそもネットに出してはいけない

Powered by はてなブログ