Crypt::RC4を使ってみる
winnyにも使用されたRC4!っていうとすごそうに見えるけど、実装はかなりシンプルっぽい。お手軽に使える可逆暗号を探してたので、これはちょうどいいかも。今まではCrypt::CBCでBlowfish + Base64でASCII化とかしてたけど、そこまでするほどか?と思ってきたので。
use strict; use warnings; use Crypt::RC4; my $passphrase = 'crypton'; my $plaintext = 'hatsunemiku'; my $encrypted = encrypt($passphrase, $plaintext); my $decrypted = decrypt($passphrase, $encrypted); print "encrypted = $encrypted\n"; print "decrypted = $decrypted\n"; sub encrypt{ my ($passphrase, $plaintext) = @_; my $encrypted = RC4($passphrase, $plaintext); $encrypted =~ s/(.)/unpack('H2', $1)/eg; return $encrypted; } sub decrypt{ my ($passphrase, $encrypted) = @_; $encrypted =~ s/([0-9A-Fa-f]{2})/pack('H2', $1)/eg; my $decrypted = RC4($passphrase, $encrypted); return $decrypted; }
$ perl rc4.pl encrypted = 6cec7abbb3035df64a491f decrypted = hatsunemiku
ふむ。
エンコードされたパスワードはスクリプト内にベタ打ちしたいので*1、文字列になってると嬉しいかなと思ってベタなエンコードをしてみました。Base64使うのも大げさだしなー。
これで多少軽くなるとよいのだけど。
*1:まあ、その程度のセキュリティ要件なのです