【问题标题】:Error: AES Encryption key: invalid conversion from ‘char*’ to ‘unsigned char’错误:AES 加密密钥:从“char*”到“unsigned char”的无效转换
【发布时间】:2020-01-20 01:39:55
【问题描述】:

我正在尝试使用 aes.h 使用 AES 进行加密 我在分配以前生成的加密密钥时遇到问题。

const static unsigned char aes_key[]={(unsigned char*)strKey};

我收到以下错误:error: invalid conversion from ‘char*’ to ‘unsigned char’ [-fpermissive] const static unsigned char aes_key[]={(unsigned char*)strKey};

#include <openssl/aes.h>
#define KEYSIZE 16

int main()
{

        char key[KEYSIZE];
        char strKey[(KEYSIZE*2)+1]={0};

        for (int i = 0; i< KEYSIZE; i ++){
            key[i] = (unsigned char) rand()%256;  
            printf("%.2x\n", (unsigned char)key[i]);  
            sprintf(&strKey[i*2], "%.2x",  (unsigned char) key[i]);



        }

        printf("\n");
        printf( "%s\n", strKey);



        const static unsigned char aes_key[]={(unsigned char*)strKey};

        /* AES-128 bit CBC Encryption */
        AES_KEY enc_key;
        AES_set_encrypt_key(aes_key, sizeof(aes_key)*8, &enc_key);
        AES_cbc_encrypt(aes_input, enc_out, sizeof(aes_input), &enc_key, iv, AES_ENCRYPT);


return 0;
}

【问题讨论】:

    标签: c++ c encryption aes


    【解决方案1】:

    您要做的是用另一个数组变量strkey 初始化数组aes_key。这在 C 中是不允许的。

    你可以做的是

    int len = strlen(strKey);
    const static unsigned char aes_key[len+1];
    strcpy(aes_key, str_key);
    

    【讨论】:

    • "你要做的是用另一个数组变量 strkey 初始化数组 aes_key"。这样做确实是 OP 的意图。但严格来说,他所做的和错误所说的是定义一个元素 unsigned char 数组并用 char * 初始化它
    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 2023-04-01
    • 1970-01-01
    • 2016-07-25
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多