【问题标题】:I am having a problem with the base64_decode output in Perl being truncated我在 Perl 中的 base64_decode 输出被截断时遇到问题
【发布时间】:2021-08-16 20:46:53
【问题描述】:

我正在尝试对最初由另一个程序进行 base64 编码的密钥进行 base64_decode。我没有回到导致我的程序失败的原始值。有人可以帮我理解我做错了什么吗?

原始密钥存储在文件key_e.bin中:

hexdump key_e.bin 0000000 8e48 7360 9641 3c4a a2ed d804 2525 c629 0000010 28e2 cb6d 0f60 5a73 b8b0 f7c2 f98b cfaf 0000020 2780 BBEA 3860 0a90
0000028

当我使用 base64 的 bash 提示版本时,它可以正常工作。

base64 -w0 key_e.bin > key_e.b64 猫 key_e.b64 SI5gc0GWSjztogTYJSUpxuIobctgD3NasLjC94v5r8+AJ+q7YDiQCg== base64 -d -w0 key_e.b64 > resultant_key_e.bin hexdump resultant_key_e.bin 0000000 8e48 7360 9641 3c4a a2ed d804 2525 c629 0000010 28e2 cb6d 0f60 5a73 b8b0 f7c2 f98b cfaf 0000020 2780 BBEA 3860 0a90
0000028

在 perl 中,我没有得到同样的结果。 我的代码:

open IN, '<', "key_e.bin" or die "Can't read key_e.bin file $!";
my $key_e_from_file = <IN>;
close IN;

my $key_e_b64 = encode_base64($key_e_from_file);
print "The base64 encoded key e is:\n\t$key_e_b64\n";

# Now attempt to base64 decode this value
my $key_e_bin = decode_base64($key_e_b64);
open OUT, '>', "key_e_from_perl.bin" or die "Can't write to output file $!";
binmode OUT;
print OUT "key_e_bin";
close OUT;

回到 bash 提示符,我看到 b64 版本的值与以前相同: SI5gc0GWSjztogTYJSUpxuIobctgD3NasLjC94v5r8+AJ+q7YDiQCg== 但是,bin 文件包含不正确的数据:

hexdump key_e_from_perl.bin 0000000 8e48 7360 9641 3c4a a2ed d804 2525 c629 0000010 28e2 cb6d 0f60 5a73 b8b0 f7c2 f98b cfaf 0000020 2780 BBEA 3860 0090
0000028

注意字节 0x26 是 00,而不是 0a。

【问题讨论】:

  • 在其他问题中,您将二进制文件视为文本文件,并且只读取第一行的值(即忽略第一个 \n 之后二进制文件中的所有内容)。

标签: perl base64 key decode


【解决方案1】:

您发布的代码只是将变量key_e_bin 的名称而不是其值写入文件key_e_from_perl.bin。如果确实打印了该值,则结果是正确的,前提是缺少的 use MIME::Base64; 预先添加到代码中。所描述的数据只有byte 0x26(实际上是byte 0x27,因为字的MSB排在第二位)不正确必须来自完全不同的程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2012-04-16
    相关资源
    最近更新 更多