【发布时间】: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 之后二进制文件中的所有内容)。