【发布时间】:2020-08-28 15:41:15
【问题描述】:
我有设置大小的字符串并尝试对其进行 AES 加密,但我在EVP_EncryptUpdate 收到分段错误
size_t dec_len = 20;
char *dec = malloc(dec_len + 1);
//Fill dec
...
//Encrypt
EVP_CIPHER_CTX *ctx;
ctx = EVP_CIPHER_CTX_new();
unsigned char *key = (unsigned char *)" no ";
EVP_EncryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, &key, NULL);
EVP_CIPHER_CTX_set_padding(ctx, 0);
unsigned char *ciphertext;
int ciphertext_len;
EVP_EncryptUpdate(ctx, ciphertext, &ciphertext_len, dec, dec_len);
EVP_EncryptFinal_ex(ctx, ciphertext + ciphertext_len, &ciphertext_len);
EVP_CIPHER_CTX_free(ctx);
我不知道是什么原因造成的。谢谢。
【问题讨论】:
-
你告诉 OpenSSL 在哪里存储密文?
-
" no "是实际密钥的替代品吗,我认为它实际上是正确的长度并正确生成?如果您只是将随机 cstrings 交给这个(例如,密码而不是正确的 AES 密钥),我不希望它起作用。鉴于您传递了错误的类型,我也希望收到警告(如下面的 Andrew 所述)。您是否确保解决所有警告? -
您似乎也将未初始化的指针作为密文传递(这可能也是 user253751 所要求的)。那只是写入随机存储器。你的意思是为密文分配一个缓冲区吗? (同样,我希望编译器会警告您这个 used-before-assignment 错误。)我将从如何使用这些函数的 OpenSSL 示例开始。 openssl.org/docs/man1.1.1/man3/EVP_EncryptInit_ex.html
-
通过分配密文解决。
标签: c encryption openssl aes