使用Karl Malbrain's C AES实现我想加密可变长度的文件。但是,使用下面的代码会产生一个密码,只有16个字节的正确加密字节,然后是一些00字节,再次是密码的起始16个字节。
我是否错误地实现了它,或者AES实现不是用于输入> 16个字节?
祝你好运, -P
#include <stdio.h>
#include <stdint.h>
#include "aes.h"
#include <string.h>
void encryptStuff(void){
uint8_t key[AES_KEY_LENGTH] = "diesisteintest!!";
uint8_t keyschedule[AES_KEY_LENGTH * AES_ROUNDS] = {0x00};
uint8_t message[16] = {0x00};
uint8_t cipher[16197] = {0x00};
uint8_t i = 0;
uint8_t buffer[16197] = {0x42};
unsigned char filename[] = "test.bin";
FILE *ptr;
ptr = fopen(filename, "rb");
i = fread(buffer, 1, sizeof(buffer), ptr);
printf("Read %d bytes from %s:\n", i, filename);
for(i = 0; i<100;i++){
printf("%02x ", buffer[i]);
}
printf("\n", buffer);
printf("\n[D] Running AES-128 encryption\n");
aes_expand_key(key, keyschedule);
aes_encrypt(buffer, keyschedule, cipher);
printf("message: ");
for(i = 0; i<AES_KEY_LENGTH; i++){
printf("%02x", message[i]);
}
printf(" | cipher: ");
for(i = 0; i<sizeof(cipher); i++){
printf("%02x ", cipher[i]);
}
puts("");
}
int main(){
encryptStuff();
return 0;
}
答案 0 :(得分:0)
与所有阻止密码(如DES,AES,RSA,...)一样,它们都会一次加密一个阻止数据。对于AES-128,它恰好是16个字节。所以是的,你必须一次加密16字节的数据。
查看Block cipher mode of operation了解正在使用的各种分组密码模式。