#include <stdio.h>
#include <stdint.h>
#include <string.h>
void encrypt (uint32_t v[], uint32_t k[]) {
uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
printf("encrypt() v0=%08x,v1=%08x\n",v0,v1);
for (i=0; i < 32; i++) { /* basic cycle start */
sum += delta;
v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
} /* end cycle */
v[0]=v0; v[1]=v1;
}
void decrypt (uint32_t v[], uint32_t k[]) {
uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
for (i=0; i<32; i++) { /* basic cycle start */
v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
sum -= delta;
} /* end cycle */
v[0]=v0; v[1]=v1;
}
#define N 40
int main()
{
uint8_t str[N];
int i;
uint32_t k[4]= {0, 0, 0, 0};
uint8_t *pkey;
memcpy(str,"my test stringsdfsfew2034442^&8*()\\r\\r12",N);
//memcpy(str,"hello!!!",N);
//memcpy(str,"12345678",N);
pkey=(uint8_t *)&k;
memcpy(pkey,"abcdef1234567890",16);
printf("16进制Key是: ");
for(i=0;i<16;i++)
printf("%02x ",pkey[i]);
printf("\n\n");
printf("Long类型的Key是: ");
for(i=0;i<4;i++)
printf("%08x ",k[i]);
printf("\n\n");
//--------------------------------------------
printf("加密前是:\n");
for(i=0;i<N;i++)
printf("%02x ",str[i]);
printf("\n\n");
//----------------------------
printf("密文:\n");
for(i=0;i<N/8;i++)
encrypt((uint32_t *)&str[i*8], k);
for(i=0;i<N;i++)
printf("%02x ",str[i]);
printf("\n\n");
//--------------------------------------------
printf("解开:\n");
for(i=0;i<N/8;i++)
decrypt((uint32_t *)&str[i*8], k);
for(i=0;i<N;i++)
printf("%02x ",str[i]);
printf("\n\n");
printf("解密后字符串:%.*s\n",sizeof(str),str);
return 0;
}
TEA加密算法Demo
最新推荐文章于 2021-01-29 20:06:29 发布