ショコラ
OpenSSLで文字列を暗号化して一位の値を得るには?
今回は opelsslコマンドで「一位の文字列」から「別の一位の文字列」に変換することです。
これには -Kオプションんと -ivオプションを指定します。
もっさん先輩
echo '{文字列}' | openssl enc -aes256 -K {適当な数字} -iv {適当な数字} -base64
①文字列をパスワード(-kオプション)で暗号化します。
echo 'キメマス' | openssl enc -aes256 -k 123456 -base64
同じ文字列を同じパスワードで暗号化しても出力される文字列は違います。
今回は出力される文字列を同じ値にしたいので、この方法ではありません。
$ echo 'キメマス' | openssl enc -aes256 -k 123456 -base64
U2FsdGVkX1+nyoAoRSV7sDB6fmNwEVgXbCwL3v+blUI=
$ echo 'キメマス' | openssl enc -aes256 -k 123456 -base64
U2FsdGVkX1+Oqe5YRGc5Tfk8N/E25c1/sY3a7zfKP6A=
②文字列をパスワード(-kオプション)で複合化します。
echo 'U2FsdGVkX1+nyoAoRSV7sDB6fmNwEVgXbCwL3v+blUI=' | openssl enc -aes256 -k 123456 -base64 -d
出力された文字列が異なっても、元の文字列が複合化されます。
$ echo 'U2FsdGVkX1+nyoAoRSV7sDB6fmNwEVgXbCwL3v+blUI=' | openssl enc -aes256 -k 123456 -base64 -d
キメマス
$ echo 'U2FsdGVkX1+Oqe5YRGc5Tfk8N/E25c1/sY3a7zfKP6A=' | openssl enc -aes256 -k 123456 -base64 -d
キメマス
③文字列をパスワード(-Kオプションと-ivオプション)で暗号化します。
echo 'キメマス' | openssl enc -aes256 -K 0 -iv 0 -base64
-Kオプションと -ivオプションを指定すると一意の値が取得できます。
求めていたのはこの形です。
$ echo 'キメマス' | openssl enc -aes256 -K 0 -iv 0 -base64
uCBvMYOlQmr1/ILo4uiCqw==
$ echo 'キメマス' | openssl enc -aes256 -K 0 -iv 0 -base64
uCBvMYOlQmr1/ILo4uiCqw==
④文字列をパスワード(-Kオプションと-ivオプション)で複合化します。
echo 'uCBvMYOlQmr1/ILo4uiCqw==' | openssl enc -aes256 -K 0 -iv 0 -base64 -d
$ echo 'uCBvMYOlQmr1/ILo4uiCqw==' | openssl enc -aes256 -K 0 -iv 0 -base64 -d
キメマス
-kオプションと -ivオプションの組み合わせではダメです。
echo 'キメマス' | openssl enc -aes256 -k 123456 -iv 0 -base64
$ echo 'キメマス' | openssl enc -aes256 -k 123456 -iv 0 -base64
U2FsdGVkX19g4msHiof5n/U/oCdJ/ucmuTYVSy8+P3k=
$ echo 'キメマス' | openssl enc -aes256 -k 123456 -iv 0 -base64
U2FsdGVkX1+dBK2nujUUnDtqlwwVlsp5d7B++TgNfCk=
因みにパスワードが間違った場合のエラーは以下のようになります。
$ echo 'uCBvMYOlQmr1/ILo4uiCqw==' | openssl enc -aes256 -K 1 -iv 0 -base64 -d
bad decrypt
139841994074000:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:618:
以上