2
我有一个函数,它将我想要的超时信息字符串化为base64 url encode
,但是当我尝试解码编码的字符串时,它会返回与最初创建的字符串无关的垃圾。你如何在Perl中对Base64进行编码和解码连接字符串?
输出
[i] original string > 05cee990c62ca2ce5dfe6cd77115a96d|1331012040|1331004840|7200
[i] encoded string > MDVjZWU5OTBjNjJjYTJjZTVkZmU2Y2Q3NzExNWE5NmR8MTMzMTAxMjA0MHwxMzMxMDA0ODQwfDcyMDA=
[i] decoded string > Ó{ßtskgå×ÞéÇ{ï]ykÞ
悲哀的是同样的功能是能够解析来自Facebook检索base64url编码的信息。
功能
sub timeoutStringGen{
my ($name,$seconds) = @_;
my $uuid = uniqueID(); #generates random string
my $timeStr = time();
my $timeEnd = $timeStr + $seconds;
my $timeoutString = "$uuid|$timeEnd|$timeStr|$seconds";
my $encodedString = encode_base64url($timeoutString);
my $decodedString = decode_base64url($timeoutString);
_info "original string > $timeoutString"; #interal log function outputs to STDERR
_info "encoded string > $encodedString";
_info "decoded string > $decodedString";
return $timeoutString;
}
sub timeoutStringParse{
my ($timeoutString) = @_;
return 0 unless $timeoutString;
my ($uuid,$end,$start,$secs) = split /\Q|/,$timeoutString;
my $curr = time();
my $left = $end - $curr;
my $isExpired = ($left > 0) ? 1 : 0;
my $timeHash = {
uuid => $uuid,
end => $end,
start => $start,
secs => $secs,
exp => $isExpired,
left => $left,
curr => $curr
};
return $timeHash;
}
but maybe you can help me understand why these dont work to encode and decode the string properly
#--------
sub encode64{
my($data) = @_;
return MIME::Base64::encode_base64($data);
}
#--------
sub decode64{
my($data) = @_;
return MIME::Base64::decode_base64($data);
}
#--------
sub encode_base64url{
my($data) = @_;
return 0 unless $data;
$data = encode64($data);
$data =~ tr#\-_#+/#;
return($data);
}
#--------
sub decode_base64url{
my($data) = @_;
return 0 unless $data;
$data =~ tr#+/#\-_#;
$data = decode64($data);
return($data);
}
DOH!这正是问题所在。 *打额头*无论如何谢谢! – qodeninja 2012-03-06 03:39:46
它发生在我们所有人身上。走出去,得到下一个错误! – bernie 2012-03-06 03:41:25