2006-11-16 三連チャン二日目
AES_ENCRYPT, AES_DECRYPT可能な暗号をPerlで行う
はじめに
MySQLの関数にAES_ENCRYPT, AES_DECRYPTってのがあります。
Rijndaelを128bitのkeylengthでECBで暗号化する関数です。
AES_ENCRYPT
mysql> SELECT HEX(AES_ENCRYPT('hogehoge', 'abcdeabcdeabcdea')) AS encrypted;
+----------------------------------+
| encrypted |
+----------------------------------+
| 2BF77B6863989EAD599D86650A046586 |
+----------------------------------+
AES_DECRYPT
mysql> SELECT AES_DECRYPT(UNHEX('2BF77B6863989EAD599D86650A046586'), 'abcdeabcdeabcdea') AS decrypted;
+-----------+
| decrypted |
+-----------+
| hogehoge |
+-----------+
この関数を使って値を突っ込んでおけば、管理者のみが知るpassphraseを知らない人は、
復号出来ない文字列をデータベースにいれておけます。
Perlで扱う場合
- Crypt::ECB
- Crypt::Rijndael
が必要です。同じように行うならば、
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::ECB;
my $string = 'hogehoge';
my $cipher = Crypt::ECB->new();
$cipher->cipher('Rijndael');
$cipher->key('abcdeabcdeabcdea');
$cipher->padding(PADDING_AUTO);
my $encrypted_hex = $cipher->encrypt_hex($string);
my $decrypted = $cipher->decrypt_hex($encrypted_hex);
print $encrypted_hex . "\n";
print $decrypted . "\n";
のように行えば、MySQLのAES_ENCRYPT, AES_DECRYPTと同等の暗号化を行う事が出来ます。
余談ですけど
Crypt::ECBってCrypt::CBCとかModeを表すモジュールが既に入ってるとtest.plがコケるので、authorにpatchを送りました。
とりあえず、コケても無害ですが念のため。
*** test.pl 2000-12-17 04:21:14.000000000 +0900
--- ../test.pl.diff 2006-11-16 19:28:08.000000000 +0900
***************
*** 10,17 ****
--- 10,19 ----
foreach $path (@INC) {
while (<$path/Crypt/*.pm>) {
+ next if (/(ECB|CBC|CFB|OFB|Ctr)\.pm$/);
s|^.*Crypt/||;
s|\.pm$||;
+
print " Found $_.\n" if $crypt->cipher($_) and ++$ok;
}
}
test.pl.patchで保存して、
$ patch < test.pl.patch
で適用すれば問題なしです。
トラックバック - http://d.hatena.ne.jp/ZIGOROu/20061116/1163675128
リンク元
- 87 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLD,GGLD:2005-14,GGLD:ja&q=perl+Log::Log4perl+CPAN
- 79 http://blog.graffiti-web.org/archives/2006/11/mysql_1.html
- 57 http://b.hatena.ne.jp/entry/3260521
- 55 http://d.hatena.ne.jp/amachang/20061122/1164193523
- 42 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:en-US:official&q=smbfs+apache+uid&btnG=Google+検索&lr=lang_ja
- 38 http://www.google.co.jp/search?q=AES_ENCRYPT&lr=lang_ja&ie=utf-8&oe=utf-8&rls=org.mozilla:ja:official&client=firefox
- 37 http://d.hatena.ne.jp/amachang/about
- 36 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Catalyst+起動+ログ&num=50
- 28 http://search.yahoo.co.jp/search?p=AES_ENCRYPT&search.x=1&fr=top_ga1&tid=top_ga1&ei=UTF-8
- 28 http://www.google.co.jp/search?q=AES_DECRYPT&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox


