Why can not find AES_ctr128_encrypt defination in openssl 1.1.0g?

在OpenSSL1.1.0g中,AES_ctr128_encrypt已被移除,应使用CRYPTO_ctr128_encrypt替代。本文详细解释了如何进行替换,并提供了具体的函数调用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Why can not find AES_ctr128_encrypt defination in openssl 1.1.0g?

AES_ctr128_encrypt is removed from openssl 1.1.0g

You can use CRYPTO_ctr128_encrypt instead of AES_ctr128_encrypt

AES_ctr128_encrypt(
  in, 
  out, 
  len, 
  &cipher->aes_key->key, 
  cipher->aes_key->IV, 
  buffer, 
  &num); // removed from openssl 1.1.0g


CRYPTO_ctr128_encrypt(
  in, 
  out, 
  len, 
  &cipher->aes_key->key, 
  cipher->aes_key->IV, 
  buffer, 
  &num, 
  (block128_f)AES_encrypt); // instead
`AES_ctr128_encrypt()` 函数是 OpenSSL 库中的一个函数,用于执行 AES-CTR 加密。它的作用是将明文数据按指定的密钥和计数器进行加密,生成密文数据。 该函数封装了以下步骤: 1. 通过 `AES_set_encrypt_key()` 函数设置 AES 加密密钥。 2. 通过 `CTR_MODE` 模式初始化一个 AES 加密上下文。 3. 使用 `AES_ctr128_encrypt()` 函数对明文数据进行加密,生成密文数据。 以下是使用 `AES_ctr128_encrypt()` 函数进行加密和解密的示例代码: ```c #include <openssl/aes.h> void encrypt_decrypt_data(unsigned char *data, int data_len, unsigned char *key, unsigned char *iv) { AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); AES_ctr128_encrypt(data, data, data_len, &aes_key, iv, AES_ENCRYPT); } int main() { unsigned char key[16] = {0x00, 0x01, 0x02, ..., 0x0F}; unsigned char iv[16] = {0x00, 0x00, 0x00, ..., 0x00}; unsigned char plaintext[1024] = "Hello, world!"; int plaintext_len = strlen(plaintext); encrypt_decrypt_data(plaintext, plaintext_len, key, iv); printf("Encrypted data: %s\n", plaintext); // Decrypt the data AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); AES_ctr128_encrypt(plaintext, plaintext, plaintext_len, &aes_key, iv, AES_DECRYPT); printf("Decrypted data: %s\n", plaintext); return 0; } ``` 在上面的示例代码中,我们首先定义了一个 AES 加密密钥和一个计数器。然后定义了一个需要加密的明文数据,并计算出它的长度。接着,我们调用 `encrypt_decrypt_data()` 函数对明文数据进行加密,并输出加密后的密文数据。最后,我们将密文数据传递给 `AES_ctr128_encrypt()` 函数进行解密,并输出解密后的明文数据。 注意,使用 AES-CTR 模式进行加密时,计数器需要在每次加密时自增。因此,我们需要在加密和解密时使用相同的计数器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值