AES使用Karl Malbrain的代码加密文件

时间:2013-09-10 14:04:07

标签: c encryption aes

使用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;
}

1 个答案:

答案 0 :(得分:0)

与所有阻止密码(如DES,AES,RSA,...)一样,它们都会一次加密一个阻止数据。对于AES-128,它恰好是16个字节。所以是的,你必须一次加密16字节的数据。

查看Block cipher mode of operation了解正在使用的各种分组密码模式。