gpt4 book ai didi

c - 如何通过精确大小计算来存储 AES_encrypt 大小密码?

转载 作者:行者123 更新时间:2023-11-30 14:48:10 25 4
gpt4 key购买 nike

我面临 AES 加密文本的问题,需要一些有关相同问题的帮助,这里有一个解释,我正在使用此函数将纯文本转换为密文。

/*
* Encrypt *len bytes of data
* All data going in & out is considered binary (unsigned char[])
*/
unsigned char *aes_encrypt(EVP_CIPHER_CTX *e, unsigned char *plaintext, int *len)
{
/* max ciphertext len for a n bytes of plaintext is n + AES_BLOCK_SIZE -1 bytes */
int c_len = *len + AES_BLOCK_SIZE, f_len = 0;
unsigned char *ciphertext = palloc(c_len);

/* allows reusing of 'e' for multiple encryption cycles */
EVP_EncryptInit_ex(e, NULL, NULL, NULL, NULL);

/* update ciphertext, c_len is filled with the length of ciphertext generated,
*len is the size of plaintext in bytes */
EVP_EncryptUpdate(e, ciphertext, &c_len, plaintext, *len);

/* update ciphertext with the final remaining bytes */
EVP_EncryptFinal_ex(e, ciphertext+c_len, &f_len);

*len = c_len + f_len;
return ciphertext;
}

当我们使用加密时,这个函数工作得很好,但是当我尝试使用 strlen 计算密文的长度时,我没有得到确切的长度,我谷歌了一下,发现了一些关于密文打印的信息使用等于 len 长度的 %c 进行循环。

我的问题是如何将密文存储在具有确切长度的文件中?由于 strlen(cipher-text) 没有给出确切的长度,存储密文的方法是什么?

任何帮助将不胜感激:)提前致谢

最佳答案

这个接口(interface)的重点是 *len 现在包含密文的长度(我想它从纯文本的值开始)。 EncryptFinal 添加填充,以便更改长度。如果 plain 的长度为 16密文的长度为 32。

您不能使用strlen来计算长度。这可以在 argv 条目的情况下完成,因为这些是设计好的字符串。这里的key更像是一个密码。这是一个相当弱的加密系统(硬编码盐、5 轮等)。

ciphertext = aes_encrypt(&en, (unsigned char *)input[i], &len); 如果你想将密文写入文件,只需执行类似

 FILE *cipher = NULL; 
cipherfile=fopen("mycipher.txt", "wb");
if (NULL ==cipherfile){ /* error handling here */
}
if (1 != fwrite(ciphertext, len, 1, cipherfile)){ /* error handling */
}
close(cipherfile);

因为密文长度为len。原作者at GitHub可能打算使用 olen 来代替(现在未使用)。因此(更好)&olen 可以在上面的两个调用(aes_encryptfwrite)中使用,然后 len 保持不变输入长度,可用于解密检查等

关于c - 如何通过精确大小计算来存储 AES_encrypt 大小密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50636570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com