c语言中的openssl aes解密
Posted
技术标签:
【中文标题】c语言中的openssl aes解密【英文标题】:openssl aes decryption in c 【发布时间】:2017-11-03 10:13:01 【问题描述】:我正在尝试使用 php 和 c 创建一个 openssl aes 加密/解密。我能够使用 php 和 openssl 加密文本,这将在 base64 字符串中输出加密字符串。我正在尝试将此base64编码的字符串传递给c程序以使用c中的openssl对其进行解码。
int decrypt(unsigned char *ciphertext,
int ciphertext_len,
unsigned char *key,
unsigned char *iv,
unsigned char *plaintext)
EVP_CIPHER_CTX *ctx;
int len;
int plaintext_len;
/* Create and initialise the context */
if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors();
if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
handleErrors();
if(1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len))
handleErrors();
plaintext_len = len;
if(1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len)) handleErrors();
plaintext_len += len;
/* Clean up */
EVP_CIPHER_CTX_free(ctx);
return plaintext_len;
有什么方法可以在 c 中使用 openssl 解密 base64 字符串吗?我可以使用类似于
的命令行来解密它openssl enc -aes-256-cbc -d -in file.encrypted -nosalt -nopad -K 31323334353637383132333435363738 -iv 31323334353637383132333435363738
提前致谢
【问题讨论】:
gist.github.com/barrysteyn/4409525 这可能会有所帮助,或者:openssl.org/docs/manmaster/man3/BIO_f_base64.html klutt,谢谢你的回复,解码后我也想用openssl解密 这里是一个使用cbc的例子(不推荐使用)wiki.openssl.org/index.php/… 【参考方案1】:您正在直接处理 base64 编码数据。 首先,您需要对数据进行 base64 解码以获取实际的加密数据。然后你将应用 AES 解密来获取解密后的数据
BIO *b64, *bmem;
buffer = (char *)malloc(datalength);
b64 = BIO_new(BIO_f_base64());
if(b64 == NULL)
return NULL;
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
bmem = BIO_new_mem_buf(input, length);
if(bmem == NULL)
return NULL;
bmem = BIO_push(b64, bmem);
if(bmem == NULL)
return NULL;
ret = BIO_read(bmem, buffer, length);
if(ret == 0)
return NULL;
BIO_free_all(bmem);
return buffer;
【讨论】:
谢谢Pras的回复,可以用c解码,之后有什么办法可以用open ssl和c解密吗? @Developers Staff 我已经更新了示例代码,你也可以试试 base64 decode以上是关于c语言中的openssl aes解密的主要内容,如果未能解决你的问题,请参考以下文章
AES (aes-cbc-128, aes-cbc-192, aes-cbc-256) 使用 openssl C 加密/解密