sub lock2key { #
wiki.mydc.ru
return undef unless $_[0];
_log_system "Generating our key ...";
my
@lock = split // => shift;
my $i;
my
@key = ();
# convert to ordinal
$_=ord for
@lock;
# calc key[0] with some xor-ing magic
push
@key => ($lock[0]^5);
# calc rest of key with some other xor-ing magic
for ($i=1;$i<@lock;$i++) {
push
@key => ($lock[$i]^$lock[$i-1]);
}
$_ = ((($_ << 4) & 240) | (($_ >> 4) & 15)) & 0xFF for
@key;
unshift
@key => shift
@key ^ $key[
@key — 1 ];
# escape some
for (@key) {
$_ = ( $_ == 0 || $_ == 5 || $_ == 36 ||
$_ == 96 || $_ == 124 || $_ ==
126 ) ? sprintf('/%%DCN%03i%%/', $_) : chr;
}
# done
return join('' =>
@key);
}