>>175809
Конкретно в вакабе:
sub process_tripcode($;$$$$)
{
my ($name,$tripkey,$secret,$charset,$nonamedecoding)=@_;
$tripkey="!" unless($tripkey);
if($name=~/^(.*?)((?<!&)#|\Q$tripkey\E)(.*)$/)
{
my ($namepart,$marker,$trippart)=($1,$2,$3);
my $trip;
$namepart=decode_string($namepart,$charset) unless $nonamedecoding;
$namepart=clean_string($namepart);
if($secret and $trippart=~s/(?:\Q$marker\E)(?<!&#)(?:\Q$marker\E)*(.*)$//) # если надо безопасный трипкод и есть он
{
my $str=$1;
my $maxlen=255-length($secret);
$str=substr $str,0,$maxlen if(length($str)>$maxlen);
# $trip=$tripkey.$tripkey.encode_base64(rc4(null_string(6),"t".$str.$secret),"");
$trip=$tripkey.$tripkey.hide_data($1,6,"trip",$secret,1);
return ($namepart,$trip) unless($trippart); # вернуть сразу, если обычных трипов нет
}
# 2ch трипкоды высчитываются в Shift_JIS если возможно
eval 'use Encode qw(decode encode)';
unless($@)
{
$trippart=decode_string($trippart,$charset);
$trippart=encode("Shift_JIS",$trippart,0x0200);
}
$trippart=clean_string($trippart);
my $salt=substr $trippart."H..",1,2;
$salt=~s/[^\.-z]/./g;
$salt=~tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$trip=$tripkey.(substr crypt($trippart,$salt),-10).$trip;
return ($namepart,$trip);
}
return clean_string($name) if $nonamedecoding;
return (clean_string(decode_string($name,$charset)),"");
}