opensslを用いた文字列の暗号化・復号 [ツール]
opensslコマンドを使った文字列の暗号化と復号のまとめ
-aes-128-cbc:AES暗号、128ビット、CBCモード
-e:暗号化
-base64:表示をBase64で表示する。
-pass pass:test:パスワードフレーズとしてtestを使用
-p:saltやKey、IVを表示
#echo "TEST"|openssl enc -aes-128-cbc -e -base64 -pass pass:test -p
結果の表示
salt=F6BEF056BA3B3E00
key=0A1430ED15866E4907BB3F98EA19F463
iv =E2FC0CE7D64F5A86034F487E7E50A5B4
U2FsdGVkX1/2vvBWujs+AKB//Shqg1mdUOMFvoNyi/o=
復号
-aes-128-cbc:AES暗号、128ビット、CBCモード
-d:復号
-base64:入力をBase64で扱う。
-pass pass:test:パスワードフレーズとしてtestを使用
-p:saltやKey、IVを表示
#echo "U2FsdGVkX1/2vvBWujs+AKB//Shqg1mdUOMFvoNyi/o="|openssl enc -d -aes-128-cbc -base64 -pass pass:test -p
結果の表示
salt=F6BEF056BA3B3E00
key=0A1430ED15866E4907BB3F98EA19F463
iv =E2FC0CE7D64F5A86034F487E7E50A5B4
TEST
元に戻ったのを確認できました。
この暗号化の結果である
U2FsdGVkX1/2vvBWujs+AKB//Shqg1mdUOMFvoNyi/o=
は、Base64でありバイナリに直して文字列化すると
Salted__コ;>…
となり、
バイナリでは、
53 61 6C 74 65 64 5F 5F F6 BE F0 56 BA 3B 3E 00 A0 7F FD 28 6A 83 59 9D 50 E3 05 BE 83 72 8B FA
と表示できます。
最初の16バイトはSaltです。
53 61 6C 74 65 64 5F 5F = S a l t e d _ _
なので、
Salted__F6 BE F0 56 BA 3B 3E 00
であり、除外する必要があります。
Saltの部分を取り除くと本来の暗号化バイト列は、
A0 7F FD 28 6A 83 59 9D 50 E3 05 BE 83 72 8B FA
です。
よって、これを復号するためには、
暗号化バイト列
A07FFD286A83599D50E305BE83728BFA
鍵
key=0A1430ED15866E4907BB3F98EA19F463
IV
iv =E2FC0CE7D64F5A86034F487E7E50A5B4
と
AES暗号、128ビット、CBCモード、パディングはPKCS7かな?
で
TEST
が出てきます。
バイト列に直すと、
54 45 53 54 0A
なので、改行文字列が含まれていました。
#echo "TEST"
は改行が入るのですね。
続いて、KeyとIVを直性指定し、Saltを使用しない方法
-aes-128-cbc:AES暗号、128ビット、CBCモード
-e:暗号化
-base64:表示をBase64で表示する。
-K:keyバイト列
-iv:IVバイト列
-p:saltやKey、IVを表示
-nosalt:Saltを使用しない
#echo "TEST"|openssl enc -aes-128-cbc -e -base64 -K "A48C3157CF75EC0A1DBA46B6622F5585" -iv "D526E07AA918B6E57123C390E5C90C24" -nosalt -p
結果の表示
key=A48C3157CF75EC0A1DBA46B6622F5585
iv =D526E07AA918B6E57123C390E5C90C24
DhRA4JXmeddc5Apquyer8w==
これを復号します。
-aes-128-cbc:AES暗号、128ビット、CBCモード
-d:復号
-base64:入力をBase64で扱う。
-K:keyバイト列
-iv:IVバイト列
-p:saltやKey、IVを表示
-nosalt:Saltを使用しない
#echo "DhRA4JXmeddc5Apquyer8w=="|openssl enc -aes-128-cbc -d -base64 -K "A48C3157CF75EC0A1DBA46B6622F5585" -iv "D526E07AA918B6E57123C390E5C90C24" -nosalt -p
結果の表示
key=A48C3157CF75EC0A1DBA46B6622F5585
iv =D526E07AA918B6E57123C390E5C90C24
TEST
復号できたのが確認できました。
opensslがどうやって鍵を生成しているかは、以下のサイトが参考になります。
http://alpha.mixi.co.jp/2007/10639/
-aes-128-cbc:AES暗号、128ビット、CBCモード
-e:暗号化
-base64:表示をBase64で表示する。
-pass pass:test:パスワードフレーズとしてtestを使用
-p:saltやKey、IVを表示
#echo "TEST"|openssl enc -aes-128-cbc -e -base64 -pass pass:test -p
結果の表示
salt=F6BEF056BA3B3E00
key=0A1430ED15866E4907BB3F98EA19F463
iv =E2FC0CE7D64F5A86034F487E7E50A5B4
U2FsdGVkX1/2vvBWujs+AKB//Shqg1mdUOMFvoNyi/o=
復号
-aes-128-cbc:AES暗号、128ビット、CBCモード
-d:復号
-base64:入力をBase64で扱う。
-pass pass:test:パスワードフレーズとしてtestを使用
-p:saltやKey、IVを表示
#echo "U2FsdGVkX1/2vvBWujs+AKB//Shqg1mdUOMFvoNyi/o="|openssl enc -d -aes-128-cbc -base64 -pass pass:test -p
結果の表示
salt=F6BEF056BA3B3E00
key=0A1430ED15866E4907BB3F98EA19F463
iv =E2FC0CE7D64F5A86034F487E7E50A5B4
TEST
元に戻ったのを確認できました。
この暗号化の結果である
U2FsdGVkX1/2vvBWujs+AKB//Shqg1mdUOMFvoNyi/o=
は、Base64でありバイナリに直して文字列化すると
Salted__コ;>…
となり、
バイナリでは、
53 61 6C 74 65 64 5F 5F F6 BE F0 56 BA 3B 3E 00 A0 7F FD 28 6A 83 59 9D 50 E3 05 BE 83 72 8B FA
と表示できます。
最初の16バイトはSaltです。
53 61 6C 74 65 64 5F 5F = S a l t e d _ _
なので、
Salted__F6 BE F0 56 BA 3B 3E 00
であり、除外する必要があります。
Saltの部分を取り除くと本来の暗号化バイト列は、
A0 7F FD 28 6A 83 59 9D 50 E3 05 BE 83 72 8B FA
です。
よって、これを復号するためには、
暗号化バイト列
A07FFD286A83599D50E305BE83728BFA
鍵
key=0A1430ED15866E4907BB3F98EA19F463
IV
iv =E2FC0CE7D64F5A86034F487E7E50A5B4
と
AES暗号、128ビット、CBCモード、パディングはPKCS7かな?
で
TEST
が出てきます。
バイト列に直すと、
54 45 53 54 0A
なので、改行文字列が含まれていました。
#echo "TEST"
は改行が入るのですね。
続いて、KeyとIVを直性指定し、Saltを使用しない方法
-aes-128-cbc:AES暗号、128ビット、CBCモード
-e:暗号化
-base64:表示をBase64で表示する。
-K:keyバイト列
-iv:IVバイト列
-p:saltやKey、IVを表示
-nosalt:Saltを使用しない
#echo "TEST"|openssl enc -aes-128-cbc -e -base64 -K "A48C3157CF75EC0A1DBA46B6622F5585" -iv "D526E07AA918B6E57123C390E5C90C24" -nosalt -p
結果の表示
key=A48C3157CF75EC0A1DBA46B6622F5585
iv =D526E07AA918B6E57123C390E5C90C24
DhRA4JXmeddc5Apquyer8w==
これを復号します。
-aes-128-cbc:AES暗号、128ビット、CBCモード
-d:復号
-base64:入力をBase64で扱う。
-K:keyバイト列
-iv:IVバイト列
-p:saltやKey、IVを表示
-nosalt:Saltを使用しない
#echo "DhRA4JXmeddc5Apquyer8w=="|openssl enc -aes-128-cbc -d -base64 -K "A48C3157CF75EC0A1DBA46B6622F5585" -iv "D526E07AA918B6E57123C390E5C90C24" -nosalt -p
結果の表示
key=A48C3157CF75EC0A1DBA46B6622F5585
iv =D526E07AA918B6E57123C390E5C90C24
TEST
復号できたのが確認できました。
opensslがどうやって鍵を生成しているかは、以下のサイトが参考になります。
http://alpha.mixi.co.jp/2007/10639/
簡潔、直接で素晴らしい。How To の情報を求める人にとって、
ページはこのページのようであるべき、と感心しました。
by 佐々木 一郎 (2019-09-26 15:02)