故有って、データの暗号化と復号する方法について簡単に調べましたので、忘れないように書いておこう!
単純にデータの暗号化と復号について調べてみた
ファイルの安全性や、暗号化自体に付いての問題点などを、ここでは問題にしていません
単に、ファイルを暗号化し復号化しただけの工程で、Windows と Linux で行いました
1. OpenSSL の入手
OpenSSL コマンドで、ファイルの暗号化と復号が行えるようです
Linux
OpenSSL の入手は Linux なら問題ないと思います
ただし、バージョンに関しては管理方法などによって異なると思います
確認した Ubuntu では
user@ubuntuSouzoku:~$ openssl version
OpenSSL 1.0.1f 6 Jan 2014
user@ubuntuSouzoku:~$
となっています
先ほど apitude full-upgrade したばかりですので問題ないのだと思います
これとは別の Linux のいにしえの版なのですが、アップデード出来ずにいたので、比較対象として併せて確認してみました
[root@xxxx root]# openssl version
OpenSSL 0.9.7d 17 Mar 2004
[root@xxxx root]#
こちらの比較対象の openssl のバージョンはこんな感じです
Windows
Windows 版の openssl は、インストーラーは使用せず、ZIP で配布されているものを利用しました
謹製アプリに同梱する可能性がありますので、個別にインストールせずに利用します
http://www.openssl.org/
から About – Binaries – と辿って、indy と言う物を入手しました
http://indy.fulgan.com/SSL/
ここで配布しているものを利用しました
openssl.org によると、最新版は OpenSSL 1.0.2a の様です
openssl-1.0.2a-x64_86-win64.zip
このファイルを使わせて頂きました
同梱されているライセンスファイルによると BSD スタイルのライセンスですので、有り難く使わせて頂く事にしました
コマンドラインで実行する場合、openssl.conf が見つからないと言う旨のメッセージが表示されます
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
このパスでは、もちろん見つかる訳がありませんね ^^..
環境変数に OPENSSL_CONF を設定するそうですが、今回は割愛しました(必要なら修正します)
.
2. 暗号化と復号
コマンドラインで、次の様に入力します
user@ubuntuSouzoku:~$ openssl aes-256-cbc -e -in ReadMe.txt -out ReadMe.txt2 -pass pass:12345
user@ubuntuSouzoku:~$ openssl aes-256-cbc -d -in ReadMe.txt2 -out ReadMe.txt3 -pass pass:12345
user@ubuntuSouzoku:~$ md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt
db23d70ad6f0ffe000ac6bb9458c58be ReadMe.txt2
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt3
user@ubuntuSouzoku:~$
最初の行で ReadMe.txt を aes-256-cbc で暗号化して ReadMe.txt2 と言うファイルに出力しています
次の行は ReadMe.txt2 を 復号化して ReadMe.txt3 と言うファイル名で出力しています
三行目は ハッシュ値を比較しています
ReadMe.txt と ReadMe.txt3 が同じですので、きちんと復号化されたと言う事です
Windows はこんな感じです
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>openssl aes-256-cbc -e -in ReadMe.txt -out ReadMe.txt2 -pass pass:12345
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>openssl aes-256-cbc -d -in ReadMe.txt2 -out ReadMe.txt3 -pass pass:12345
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>fciv -md5 ReadMe.txt
//
// File Checksum Integrity Verifier version 2.05.
//
f97a4da150b6de0b262c4e1cce07a50b readme.txt
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>fciv -md5 ReadMe.txt2
//
// File Checksum Integrity Verifier version 2.05.
//
e9a886c2c31cb75050f8fabd1aca9a7b readme.txt2
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>fciv -md5 ReadMe.txt3
//
// File Checksum Integrity Verifier version 2.05.
//
f97a4da150b6de0b262c4e1cce07a50b readme.txt3
次に Windows と Linux を跨いだときですが、簡単な実験で互換性があるのか確認してみました
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>openssl aes-256-cbc -e -in ReadMe.txt -out ReadMe.txtW -pass pass:12345
結果は
df2168031daa96e5f1760eb8e7f4cea1 readme.txtw
これを Ubuntu へコピーしてデコードしてみます
user@ubuntuSouzoku:~$ md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt
db23d70ad6f0ffe000ac6bb9458c58be ReadMe.txt2
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt3
df2168031daa96e5f1760eb8e7f4cea1 ReadMe.txtW
user@ubuntuSouzoku:~$ openssl aes-256-cbc -d -in ReadMe.txtW -out ReadMe.txt4 -pass pass:12345
user@ubuntuSouzoku:~$ md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt
db23d70ad6f0ffe000ac6bb9458c58be ReadMe.txt2
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt3
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt4
df2168031daa96e5f1760eb8e7f4cea1 ReadMe.txtW
user@ubuntuSouzoku:~$
ReadMe.txt と ReadMe.txt4 が同じハッシュになっています
ちなみに、同じ引数で暗号化した暗号化ファイルのハッシュ値が異なるのは
Salt が異なるからですので問題ありません
※ 同じ引数で暗号化しても、同じ暗号化ファイルができるという訳ではありません
.
3. おまけ
その1
一応、古い RedHat 系の Linux でも確認してみました
[root@xxxx root]# md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt
c9357d9cb9c01c1578f00c075324ca71 ReadMe.txtW
[root@xxxx root]# openssl aes-256-cbc -d -pass pass:12345 -in ReadMe.txtW -out ReadMe.txt5
[root@xxxx root]# md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt
f97a4da150b6de0b262c4e1cce07a50b ReadMe.txt5
c9357d9cb9c01c1578f00c075324ca71 ReadMe.txtW
[root@xxxx root]#
問題ないようです
その2
Linux では man openssl とすれば使い方が解りますが、Windows では表示出来ないようです
http://wiki.openssl.org/index.php/Manual:Openssl(1)
こちらを確認すると良いと思います
その3
暗号化されているファイルをダンプすると 'Salted ' と先頭に表示されます
-nosalt オプションを付けると Salted にはなりません
その4
Salt , Key , iv を併せると同じファイルが出力出来るそうです
-S Salt
-K Key
-iv iv
を指定するそうです
指定された Salt 等を表示するには -P オプションをコマンドラインに追加します
通常、任意の文字が割り当てられると思いますので、問題ありません
.