我是AES的开发者。 所以我下载并使用。所以,这是我的问题。如果我使用 [数组] 是很好的工作。但是如果我使用 [malloc] 是错误的。我错了什么?
uint8_t key[] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c };
uint8_t iv[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
uint8_t *original = "aaaaaaaaaaaaaaaaa65aaaaaaaaaaaassssssssssssssssssssss65sssaaaaaa";
int len = 65;
uint8_t out[64] = {0,};
uint8_t ctext[200] = { 0, };
//uint8_t *ctext = (uint8_t*)malloc(sizeof(uint8_t) * len);
for (int i = 0; len > 0; i+=64) {
len = len - 64;
AES128_CBC_encrypt_buffer(out, original + i, 64, key, iv);
memcpy(ctext+i , out, 64);
}
uint8_t ptext[200] = { 0, };
len = 65;
for (int i = 0; len > 0; i += 64) {
len = len - 64;
AES_CBC_dec(out, ctext + (i * sizeof(uint8_t)), key, iv, 64);
memcpy(ptext + (i * sizeof(uint8_t)), out, 64);
}
return 0;
文本[200]
这是有效的。但是。如果我会使用
*文本
是错误
我错了什么?是C郎。
有了len = 65
,你memcpy
了两倍len = len - 64
在第一次迭代后仍然> 0
。
您的memcpy
现在从 ctext + 64 开始,这将超出内存分配的限制sizeof(uint8_t) * len
您可以通过使用len = 64
仅导致循环的一次迭代或通过保持len = 65
并将内存分配加倍sizeof(uint8_t) * len * 2
如果您使用malloc
请不要忘记事后释放内存
*ctext 是数组中的第一个uint_8。改用 ctext (地址)。请务必分配足够的空间。