OpenSSLで文字列を暗号化して一位の値を得るには?

ショコラ
ショコラ

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:

以上

Scroll to Top