gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:16 25 4
gpt4 key购买 nike

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

最佳答案

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

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

关于c - AES 使用 Karl Malbrain 的代码加密文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18721072/

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