ぅぃ♪
Boo2008実装型
sub Make_Trip{
# 仕様変更? @2009/06/17
my $key = shift;
my $salt;
($key) = $key =~ /^#(.+)/;
=comment
【堅牢】トリップの新方式を考えてみませんか【互換性】
http://qb5.2ch.net/test/read.cgi/operate/1244993904/309 309 名前: ◆cZfSunOs.U 投稿日:2009/06/19(金) 11:46:10 ID:MLNb4KfK0
生キー指定以外の12桁以上「##〜」形式も将来の拡張用にしておきましょう.
で,まとめ:
・ 従来はトリップキーも含め <> や NG ワード等の置換処理が行われていたが,それをスルーするようにした.
・ キーの長さが 1024 桁を超えるとエラー.
=cut
# 12文字以上ある時に新式採用
if (length $key >= 12) {
my $mark = substr($key, 0, 1);
if ($mark eq '#' or $mark eq '$') {
# 塩付きkey
if (($key, $salt) = $key =~ m|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|){
$key = substr(crypt(pack('H*', $key), "$salt.."), -10);
}
# 将来の拡張用
else {
$key = '???';
}
}
# そのままkey
else {
$key = substr(sha1_base64($key), 0, 12);
$key =~ tr/+/./;
}
}
else {
# 従来形式
$salt = substr($key, , 1) . "H";
$salt =~ tr|x3A-x40x5B-x60x00-x2Dx7B-xFF|A-Ga-f.|; # 仕様変更 @2003/11/15
$key = substr crypt($key, $salt), -10;
}
return "◆$key";
}