gpt4 book ai didi

c - 通过传递数组作为输入数据来实现 AES-128 CBC

转载 作者:行者123 更新时间:2023-11-30 16:28:50 26 4
gpt4 key购买 nike

我正在研究 AES-128/192/256,基本上我是从代理处以字符串形式获取数据,我只需要加密该数据并且需要验证它。

我已经遇到过这些 https://github.com/empyreanx/tiny-AES128-C , https://github.com/kokke/tiny-AES-c链接。

我的代码是:

static void test_encrypt_cbc(void)
{
unsigned char input[] =
"So_letmeknowRuinterested/towork@thiscompany.comElsewilllookother";
//64bits

unsigned char cipher[sizeof input];

printf("size of in:%lu\n",strlen(input));

unsigned char key[] = "Gns7AauH3dnaod=="; //16 bits
unsigned char iv[] = "vhdNaleuTHenaOlL"; //16 bits

AES128_CBC_encrypt_buffer(cipher, input, 64, key, iv);

if(0 == memcmp((char*) cipher, (char*) input, 64))
{
printf("SUCCESS!\n");
}
else
{
printf("FAILURE!\n");
}
}

我还在加密后打印了密文,它打印了一些未定义的字符。

我不知道,但我正在比较“密码”和“输入”,最后失败了!

请任何人都可以告诉我哪里做错了。

提前致谢。

最佳答案

这对于密码来说与输入不同是合乎逻辑的,不是吗?

要检查加密是否有效,您应该解密编码消息并检查它们是否相等:

static void test_encrypt_cbc(void)
{
/* 64 bytes, or 512 bits */
unsigned char input[] =
"So_letmeknowRuinterested/towork@thiscompany.comElsewilllookother";

unsigned char cipher[sizeof input];
unsigned char output[sizeof input];

printf("size of in:%lu\n",strlen(input));

/* 16 bytes or 128 bits */
unsigned char key[] = "Gns7AauH3dnaod==";
unsigned char iv[] = "vhdNaleuTHenaOlL";

/* input --> cipher */
AES128_CBC_encrypt_buffer(cipher, input, 64, key, iv);

/* cipher --> output */
AES128_CBC_decrypt_buffer(output, cipher, 64, key, iv);

if(0 == memcmp((char*) output, (char*) input, 64))
{
printf("SUCCESS!\n");
}
else
{
int i;
printf("FAILURE!\nInput and output are different:\n");
for (i = 0; i < sizeof input; ++i)
{
printf("%02x - %02x\n", input[i], output[i]);
}
}
}

关于c - 通过传递数组作为输入数据来实现 AES-128 CBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52197937/

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