gpt4 book ai didi

C - 无法实现微型加密算法(意外值)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:28 25 4
gpt4 key购买 nike

对于 grins,我正在尝试实现一个最终将在 Arduino 上运行的微型加密算法 (TEA) 版本。是的,我知道 TEA 坏了,但没关系——除了我漫无目的的好奇之外,它不会用于任何其他用途。

输出:

加密:[ DC2F C574 ]
解密:[ 698D 5E42 ]

代码:

#include <stdio.h>
#include <stdint.h>

uint16_t KEY[4];

void encrypt(uint16_t *v) {
uint16_t v0=v[0], v1=v[1], sum=0, i; // set up
uint16_t delta=0x9e37; // a key schedule constant
for (i=0; i < 32; i++) { // basic cycle start
sum += delta;
v0 += ((v1<<4) + KEY[0]) ^ (v1 + sum) ^ ((v1>>5) + KEY[1]);
v1 += ((v0<<4) + KEY[2]) ^ (v0 + sum) ^ ((v0>>5) + KEY[3]);
} /* end cycle */
v[0]=v0; v[1]=v1;
}

void decrypt (uint16_t* v) {
uint16_t v0=v[0], v1=v[1], sum=0xC6EF, i; /* set up */
uint16_t delta=0x9e37; /* a key schedule constant */
for (i=0; i<32; i++) { /* basic cycle start */
v1 -= ((v0<<4) + KEY[2]) ^ (v0 + sum) ^ ((v0>>5) + KEY[3]);
v0 -= ((v1<<4) + KEY[0]) ^ (v1 + sum) ^ ((v1>>5) + KEY[1]);
sum -= delta;
} /* end cycle */
v[0]=v0; v[1]=v1;
}

int main()
{
// uint16_t is the same as an unsigned short
// equal to 2 bytes or 16 bits
// each hex is a nibble so 0xFFFF or 65535 is max val
uint16_t v[] = {0xFFFF, 0xFFFF};

encrypt(v);

printf(" Encrypted: ");
printf("[ %X %X ]", v[0], v[1]);

decrypt(v);
printf("\n Decrypted: ");
printf("[ %X %X ]", v[0], v[1]);
printf("\n");

return 0;
}

最佳答案

您在解密时没有为 sum 设置正确的值。 sum加密后的值为0xC6E0。在解密中设置该值而不是 0xC6EF

sum=0xC6E0;

关于C - 无法实现微型加密算法(意外值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32002321/

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