两个
openssl aes-128-cbc -d -in odt-IV-e90e89a2277f4f3b6a2080d27f734266.dat -K "12345678912345678912345678912345" -iv "e90e89a2277f4f3b6a2080d27f734266" -nopad
和
openssl enc -aes-128-cbc -d -in odt-IV-e90e89a2277f4f3b6a2080d27f734266.dat -K "12345678912345678912345678912345" -iv "e90e89a2277f4f3b6a2080d27f734266" -nopad
为我工作使用the following settings由在线计算器生成的文件:
编辑:
我证实,在线工具确实zero padding,但OpenSSL的预计PKCS#5 (also known as PKCS#7)填充:
所有分组密码通常使用PKCS#5填充也是已知的作为 标准块填充:这允许执行基本完整性或 密码检查。然而,由于随机的数据通过测试的机会要好于256中的1,所以它不是一个很好的 测试。
因此,需要以下参数:
-nopad禁用标准块填充
参见例如here。
当心,你的输出明文将有多达15个额外的二进制的0字节(\x00
)
EDIT2:
(对不起,我误解了这个问题,以为你想检查在线工具的结果)
执行与在线工具相同的操作:
echo -n "TESTTESTTESTTEST" | openssl aes-128-cbc -e -K "12345678912345678912345678912345" -iv "e90e89a2277f4f3b6a2080d27f734266" -nopad > odt-IV-e90e89a2277f4f3b6a2080d27f734266-1.dat
这一个使用echo -n
喂养输入数据。如果你不是在一个有能力的系统上工作,你将不得不准备一个文件input.txt
,其中包含字符串TESTTESTTESTTEST
(请检查它的长度是16字节 - 即最后没有换行符)。然后使用-in input.txt
选项:
openssl aes-128-cbc -in input.txt -e -K "12345678912345678912345678912345" -iv "e90e89a2277f4f3b6a2080d27f734266" -nopad > odt-IV-e90e89a2277f4f3b6a2080d27f734266-2.dat
当没有块大小对准的消息(即,其长度没有被16整除没有余数)必须应用zero padding(追加到结束,许多二进制零,使它块对齐)。
所以要encrypt the string "TESTTESTTEST"(其长度为12,则必须添加4个二进制零到它阻止对齐〜16):
echo -ne "TESTTESTTEST\x00\x00\x00\x00" | openssl aes-128-cbc -e -K "12345678912345678912345678912345" -iv "e90e89a2277f4f3b6a2080d27f734266" -nopad > odt-IV-e90e89a2277f4f3b6a2080d27f734266-3.dat
(在echo
的-e
使得反斜线的解释转义为\x00
工作)
EDIT3(奖金一个):
为了执行使用壳零填充:
input="TESTTESTTEST"
(echo -n "${input}" ; head -c 15 /dev/zero) | head -c "$((((${#input}+15)/16)*16))" | openssl aes-128-cbc -e -K "12345678912345678912345678912345" -iv "e90e89a2277f4f3b6a2080d27f734266" -nopad > odt-IV-e90e89a2277f4f3b6a2080d27f734266-4.dat
来源
2015-11-02 00:30:33
vlp
为什么你想要它匹配?无论如何,如果您对OpenSSL命令行工具有问题,那么您需要在[su]上提出问题。 –
我一直在使用在线工具进行POC工作,现在当我想要编写所有东西时,输出不匹配。这就是为什么。我在ruby/python中也尝试了OpenSSL gems/libraries,他们也给出了不同的结果。所以我很确定我有一个根本的错误。 – Umang
是的,密钥应该是十六进制编码的。目前,您的密钥长度为32个字符,由数字1至9组成,因此它*可以被解释为十六进制,但是这会导致一个128位的密钥,这将是AES-128而不是AES-256。 –