提问人:Jon Schlossberg 提问时间:4/8/2023 最后编辑:Jon Schlossberg 更新时间:4/8/2023 访问量:79
使用uri_escape_utf8后无法解码字符串
Trouble decoding string after using uri_escape_utf8
问:
在 Perl 中,我加密了一个字符串,然后使用 uri_escape_utf8这样我就可以在 URL 中发送它。然后,我收到似乎完全相同的编码字符串返回Perl,但无法弄清楚对其进行解码。
我在Perl中创建了一个简单的测试程序:
$encodedUsername = uri_escape_utf8(encrypter($u));
$enc = Encode::decode('utf8', uri_unescape($encodedUsername));
$final = unencrypter($enc);
不起作用,$final是一个空字符串。
如果我做一个常规uri_escape而不是uri_escaps_utf8一切正常。但我需要做uri_escape_utf8才能与 Jaascript 的 encodeURI组件兼容。
我错过了什么?
谢谢!-乔恩
背景:我对字符串使用 blowfish 加密,然后使用 uri_escape_utf8 以便我可以在 URL 中发送字符串。接收器是一个 javascript 程序,它使用 encodeURIComponent 将编码后的字符串发送回 Perl 程序。encodeURIComponent 应该等效于 uri_eacape_utf8。
my $mykeyS = <secret key>;
my $len = 8;
my $mS = Crypt::CBC->new( -literal_key => 1,
-key => $mykeyS,
-iv => $iv8,
-keysize => $len,
-cipher => 'Blowfish',
-header => 'none'
);
sub encrypter{
my ($val) = @_;
if (length $val < 8) {
$val = pack('A8', $val);
}
return $mS->encrypt($val);
}
sub unencrypter {
my ($valEncrypted) = @_;
eval {
$val = $mS->decrypt($valEncrypted);
if (length $val == 8) {
$val = unpack('A8', $val);
}
};
if ($@) {
$val = '';
}
return $val;
}
答:
1赞
Jon Schlossberg
4/8/2023
#1
想通了。我没有惹uri_escape_utf8,而是使用
use MIME::Base64 qw(encode_base64url decode_base64url);
encode_base64url(encrypter($u)); # to encode
unencrypter(decode_base64url($p1)); # to decode
到目前为止,它工作得很好!
评论
encrypter
unencrypter
unencrypter