如何创建与OpenSSL C++;输出以生成单元测试? 我使用了一个C++包装器,用于OpenSSL的AES-256 CBC加密,它遵循配方。这意味着需要加密一些数据,一个密钥和一个初始化向量,并返回加密的字节

如何创建与OpenSSL C++;输出以生成单元测试? 我使用了一个C++包装器,用于OpenSSL的AES-256 CBC加密,它遵循配方。这意味着需要加密一些数据,一个密钥和一个初始化向量,并返回加密的字节,c++,unit-testing,encryption,terminal,openssl,C++,Unit Testing,Encryption,Terminal,Openssl,现在相对而言,加密和解密工作正常。我可以对任何东西进行加密、解密并检索原始数据。然而,我想在绝对意义上测试它。因此,我在命令行/终端中使用OpenSSL创建加密数据,然后将其注入到测试中。但产出不匹配,我不确定从哪里开始,也不知道如何系统地解决这一问题 要生成十六进制数据: printf '%s' 'Hello world!' | xxd -ps 它返回48656C6F20776F726C6421 然后,要使用OpenSSL对其进行加密: printf '%s' '48656c6c6f2077

现在相对而言,加密和解密工作正常。我可以对任何东西进行加密、解密并检索原始数据。然而,我想在绝对意义上测试它。因此,我在命令行/终端中使用OpenSSL创建加密数据,然后将其注入到测试中。但产出不匹配,我不确定从哪里开始,也不知道如何系统地解决这一问题

要生成十六进制数据:

printf '%s' 'Hello world!' | xxd -ps
它返回
48656C6F20776F726C6421

然后,要使用OpenSSL对其进行加密:

printf '%s' '48656c6c6f20776f726c6421' | xxd -r -ps | openssl aes-256-cbc -iv 00000000000000000000000000000000 -k 0000000000000000000000000000000000000000000000000000000000000000 -nosalt | xxd -ps
它给出了
f1b486ded0fd22dad9dbdab2205f61c2

xxd-r
将十六进制转换为字节,而
xxd
则相反。我也试过用普通的
helloworld开头没有
xxd
,但也是错误的。结果总是不匹配我在C++ OpenSSL代码中得到的结果。我错过了什么


找到我的一段代码来演示结果。

我找到了答案。问题是我使用了错误的命令行参数。钥匙应该是
-K
,而不是
-K
。这是正确的格式:

printf '%s' '48656c6c6f20776f726c6421' | xxd -r -ps | openssl aes-256-cbc -iv 00000000000000000000000000000000 -K 0000000000000000000000000000000000000000000000000000000000000000 -nosalt | xxd -ps

这和C++中的OpenSSL给出了完全相同的结果。

你能把你得到的结果发布出来吗?即使是相同的IV,填充字节也应该是随机的,所以加密的数据会是不同的。@ PROMOTAJJR。唯一不确定的是盐,我去掉了。重复不会改变任何事情。