You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSSL 3.x中CRYPTO_ctr128_encrypt的替代API及弃用警告解决方法

OpenSSL 3.x 替代 CRYPTO_ctr128_encrypt 的解决方案

在OpenSSL 3.x中,CRYPTO_ctr128_encrypt和AES_encrypt这类低级加密接口已被标记为弃用,官方推荐使用EVP高级加密接口,这不仅能消除警告,还能提升代码的安全性和兼容性。

替代方案:使用EVP接口实现AES-CTR加密

以下是直接替换原有代码的完整实现:

#include <openssl/evp.h>

// 替代原有CRYPTO_ctr128_encrypt调用的函数示例
int aes_ctr_encrypt(const unsigned char *in, unsigned char *out, size_t len,
                    const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv) {
    EVP_CIPHER_CTX *ctx = NULL;
    int out_len = 0;
    int total_len = 0;

    // 创建并初始化加密上下文
    if (!(ctx = EVP_CIPHER_CTX_new())) {
        // 这里添加错误处理逻辑
        goto cleanup;
    }

    // 初始化AES-CTR加密操作
    if (EVP_EncryptInit_ex(ctx, cipher, NULL, key, iv) != 1) {
        goto cleanup;
    }

    // 执行加密
    if (EVP_EncryptUpdate(ctx, out, &out_len, in, len) != 1) {
        goto cleanup;
    }
    total_len += out_len;

    // 完成加密(CTR模式通常不会产生额外数据,但仍需调用)
    if (EVP_EncryptFinal_ex(ctx, out + total_len, &out_len) != 1) {
        goto cleanup;
    }
    total_len += out_len;

cleanup:
    // 清理上下文
    if (ctx) {
        EVP_CIPHER_CTX_free(ctx);
    }
    return total_len > 0 ? total_len : -1;
}

// 调用示例(对应你原有的代码逻辑)
// 假设cipher->aes_key->key是AES密钥(128/192/256位),IV是16字节的初始向量
int result = aes_ctr_encrypt(in, out, len, EVP_aes_128_ctr(), 
                             cipher->aes_key->key, cipher->aes_key->IV);
if (result == -1) {
    // 加密失败处理
}

关键说明:

  • 根据你的密钥长度选择对应的EVP算法:EVP_aes_128_ctr()、EVP_aes_192_ctr()或EVP_aes_256_ctr()
  • EVP接口自动处理CTR模式的计数器逻辑,无需手动维护buffer和num变量(原代码中的这两个参数已被封装到上下文内部)
  • 必须检查每个EVP函数的返回值,确保操作成功

临时抑制警告(不推荐长期使用)

如果暂时无法迁移到EVP接口,可以通过定义宏来抑制弃用警告:
在编译时添加编译选项-DOPENSSL_SUPPRESS_DEPRECATED,或者在代码开头添加:

#define OPENSSL_SUPPRESS_DEPRECATED

但请注意,这只是临时方案,低级接口在未来版本中可能会被移除,建议尽快迁移到EVP接口。

内容的提问来源于stack exchange,提问作者Navidk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:47:14