解码/编码base64 perl

时间:2014-08-03 19:45:02

标签: perl encoding base64 decoding

stackoverflow上的人帮我在Perl中进行了base64解码,但是我希望反过来使用这个脚本:

use strict;
use warnings;

use MIME::Base64;

my $str = 'CS20UumGFaSm0QXZ54HADg';

my @chars = split //, decode_base64 $str;
my @codes = map ord, @chars;
print "@codes\n";

输出= 9 45 180 82 233 134 21 164 166 209 5 217 231 129 192 14

现在我想将输出作为$strCS20UumGFaSm0QXZ54HADg作为输出? 我已经尝试了几个小时,但似乎无法做到。

3 个答案:

答案 0 :(得分:2)

使用chr作为ord的倒数。

#!/usr/bin/perl

use strict;
use warnings;

use MIME::Base64;

my @array = qw(9 45 180 82 233 134 21 164 166 209 5 217 231 129 192 14);

my $str = encode_base64(join '', map chr, @array);

print $str, "\n";

输出:

CS20UumGFaSm0QXZ54HADg==

这在perldoc(强调我的)中有说明:

  
      
  • ord EXPR
  •   
  • ord

         

    返回EXPR的第一个字符的数值。如果EXPR为空字符串,则返回0。如果省略EXPR,请使用$_。 (注意字符,而不是字节。)

         

    反过来,请参阅chr。有关Unicode的更多信息,请参阅perlunicode

  •   

答案 1 :(得分:1)

use MIME::Base64 qw( encode_base64 );

my $str = encode_base64 pack 'C*', @codes;

这将为您提供base64编码CS20UumGFaSm0QXZ54HADg==。要获取CS20UumGFaSm0QXZ54HADg(无效的base64),您需要在之后删除尾随的=字符。

$str =~ s/=+\z//;

答案 2 :(得分:1)

我怀疑你想使用encode_base64url,它使用_和 - 代替/和+并省略尾随=。