我正在使用 Perl 使用 Crypt::CBC 库执行 CBC DES 加密:
#!/usr/bin/perl
use Crypt::CBC;
$key = "\x4A\x6F\xC2\x2A\x44\xE2\xA4\x48";
$iv = "\x00\x00\x00\x00\x00\x00\x00\x00";
$data = "\x51\x55\x45\x53\x54\x49\x4F\x4E";
print "TXT->", $data, "\n";
print "HEX->", unpack("H*", $data), "\n";
$cipher = Crypt::CBC->new(-literal_key => 1,
-key => $key,
-iv => $iv,
-header => 'none');
$ciphertext = $cipher->encrypt($data);
print "ENC->", unpack("H*", $ciphertext), "\n";
代码的输出是:
TXT->QUESTION
HEX->5155455354494f4e
ENC->8220553e09f1b31ba7691f3f7fb52416
我的数据大小方便,大小为 64 位(16 个十六进制数字),符合 DES 标准。根据维基百科
DES 是原型块密码——一种算法,它采用固定长度的明文位串,并通过一系列复杂的操作将其转换为另一个相同长度的密文位串
为什么编码输出的字节长度比原始输入长?
谢谢。