1

使用Karl Malbrain 的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;
}
4

1 回答 1

0

与所有分组密码(如 DES、AES、RSA 等)一样,它们都一次一个地加密您的数据。对于 AES-128,它正好是 16 个字节。所以是的,您必须一次加密 16 个字节的数据。

查看正在使用的各种分组密码模式的分组密码操作模式。

于 2013-09-10T14:26:12.890 回答