在C中,我的openssl cmdline的等价物是什么?

在C中,我的openssl cmdline的等价物是什么?,c,openssl,C,Openssl,我正在尝试用C实现以下openssl命令行: openssl enc -aes-256-cbc -d -in /tmp/out_enc -K \ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ -iv 0 -nopad -p 命令行的输出: key=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA iv =0000

我正在尝试用C实现以下openssl命令行:

openssl enc -aes-256-cbc -d -in /tmp/out_enc -K \
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \
    -iv 0 -nopad -p
命令行的输出:

key=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
iv =00000000000000000000000000000000
<CONNECTION_REQUEST ATS_ID="2" ATP_SEQ_ID="1" REGISTRATION_ID="Y2G5R52S8PP6YX47" SERIAL_NUMBER="724574802" SPC_PRODUCT_TITLE="SPC5300" SPC_FW_VERSION="3.8.5 - R.31629" ATS_NAME="Syst&#232;me (ATS) 2" ATP1_ID="2" ATP1_UID="34" ATP1_NAME="Principal ATP 1" ATP1_COMMS_INTERFACE="1" ATP1_DEST="1, 192.168.1.62:52000" ATP1_CATEGORY="50"/>�z
前面的代码示例没有正确解密数据(在C中)

你知道我错过了什么吗


可能对openssl库中的key/iv格式缺乏理解

问题在于您假设密钥是“密码”的直接副本。使用该命令行所做的是将键指定为十六进制字符串。因此,您需要做的是将“密码”从十六进制字符串转换为密钥缓冲区。在您的示例中,您应该将每个字节都设置为十六进制值“0xAA”

因为您直接传递密钥,所以不需要MD5参数(到您的函数或到openssl中)

如果希望使用密码而不是“十六进制字符串”,则需要以某种方式将其散列到密钥缓冲区中。这就是MD5参数的作用。您可以使用PBKDF2之类的函数(尽管我将使用openssl默认SHA256而不是MD5作为哈希函数)。

e、 g.openssl enc-aes-256-cbc-pbkdf2-k密码

答案是密钥/iv必须用十六进制表示:

以下工作如预期:

unsigned char key[] =
        {   0xAA, 0xAA, 0xAA, 0xAA,
        0xAA, 0xAA, 0xAA, 0xAA,
        0xAA, 0xAA, 0xAA, 0xAA,
        0xAA, 0xAA, 0xAA, 0xAA,
        0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xAA, 0xAA,0 };
//unsigned char key[] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ;
    /* A 128 bit IV */
    unsigned char iv[] =
        {   0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00,0 };

您好,您遇到了什么错误,还是输出不符合预期?(在后一种情况下,请告知您的期望和收获。)这将有助于社区帮助您。谢谢。我希望能像openssl命令一样解密数据。我认为我在-K/-iv cmdline中缺少了一些关于key/iv设置的信息。总是有
系统(“openssl enc-aes-256-cbc-d-in/tmp/out_enc-K aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaThx供您回复。不幸的是,我无法更改加密功能。因此,我必须实现与该命令等效的命令(使用-K选项)。
unsigned char key[] =
        {   0xAA, 0xAA, 0xAA, 0xAA,
        0xAA, 0xAA, 0xAA, 0xAA,
        0xAA, 0xAA, 0xAA, 0xAA,
        0xAA, 0xAA, 0xAA, 0xAA,
        0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xAA, 0xAA,0 };
//unsigned char key[] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ;
    /* A 128 bit IV */
    unsigned char iv[] =
        {   0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00,0 };