是否可以使用EVP API使用AES CTR模式加密?

时间:2010-09-23 23:56:16

标签: encryption openssl aes

我是OpenSSL的新手。我知道应该使用EVP API执行加密,EVP API充当所有密码的通用接口。 AES CTR模式似乎存在于我的OpenSSL版本中,但EVP_aes_128_ctr的定义在evp.h中被禁用:

#if 0
const EVP_CIPHER *EVP_aes_128_ctr(void);
#endif

知道为什么会这样吗?我可以删除#if 0吗?有关获得128位AES CTR模式加密以在OpenSSL中工作的任何其他指示将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:4)

不过,看起来答案是否定的,尚未。但也许很快。我发现这个电子邮件主题表明可能已在2010年6月提交了解决此问题的补丁:

http://www.mail-archive.com/libssh2-devel@cool.haxx.se/msg01972.html

但是当我从SVN下载最新的开发分支时,仍然没有在EVP中启用AES CTR。我最后直接实现了它,为此我发现这个链接很有帮助:

AES CTR 256 Encryption Mode of operation on OpenSSL

答案 1 :(得分:1)

我使用的是AES CTR 128模式并且可以使用。我使用libssl1.0.0(我不确定我是否回答了正确的问题!我希望它会有所帮助)。 这是我的代码的一部分:

EVP_CipherInit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv,1);
EVP_CipherUpdate (ctx, ciphertext, &len, plaintext, plaintext_len);
/* Finalise the encryption. */
if(! EVP_CipherFinal_ex(ctx, ciphertext + len, &len)) handleErrors();
/*setting padding option*/
EVP_CIPHER_CTX_set_padding(ctx,0);
/* Clean up */
EVP_CIPHER_CTX_free(ctx);