#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
void tea_encrypt(uint32_t *v,uint32_t *k) {
uint32_t y = v[0],z = v[1],sum = 0,i;
uint32_t delta = 0x9e3779b9;
uint32_t a = k[0],b = k[1],c = k[2],d = k[3];
for (i = 0;i < 32;i++)
{
sum += delta;
y += ((z << 4) + a) ^ (z + sum) ^ ((z >> 5) + b);
z += ((y << 4) + c) ^ (y + sum) ^ ((y >> 5) + d);
}
v[0] = y;
v[1] = z;
}
//加密入口
uint16_t encrypt_new(uint8_t *src,uint16_t size_src,uint8_t *key){
uint8_t a = 0;
uint16_t i = 0;
uint16_t num = 0;
a = size_src % 8;
if (a != 0)//数据不够8位,后面补0(根据自己业务补位就行)
{
for (i = 0;i < 8 - a;i++)
{
src[size_src++] = 0;
}
}
num = size_src / 8;
for (i = 0;i < num;i++)
{
tea_encrypt((uint32_t *)(src + i * 8),(uint32_t *)key);
}
return size_src;
}
//解密核心算法
void tea_decrypt(uint32_t *v,uint32_t *k) {
uint32_t y = v[0],z = v[1],sum = 0,i;
uint32_t delta = 0x9e3779b9;
uint32_t a = k[0],b = k[1],c = k[2],d = k[3];
sum=delta*32;
for (i = 0;i < 32;i++)
{
z -= ((y << 4) + c) ^ (y + sum) ^ ((y >> 5) + d);
y -= ((z << 4) + a) ^ (z + sum) ^ ((z >> 5) + b);
sum -= delta;
}
v[0] = y;
v[1] = z;
}
//解密入口
uint16_t decrypt_new(uint8_t *src,uint16_t size_src,uint8_t *key){
uint16_t i = 0;
uint16_t num = 0;
num = size_src / 8;
for (i = 0;i < num;i++)
{
tea_decrypt((uint32_t *)(src + i * 8),(uint32_t *)key);
}
return size_src;
}
int main(){
unsigned char ENCRYPT_ARRAY[16] ={‘1’,‘2’,‘3’.......} ;//16位字符(根据自己业务补全)
unsigned char jiamibuf1[32]={0x60,0x00,......};//32位字符(根据自己业务补全,注意:是16进制的)
encrypt_new(jiamibuf1,32,ENCRYPT_ARRAY);
printf("加密数据:\n");
for(int j = 0; j < 32;j++){
printf("%X",jiamibuf1[j]);
}
printf("\n");
printf("解密数据:\n");
decrypt_new(jiamibuf1,ENCRYPT_ARRAY);
for(int i = 0; i < 32;i++){
printf("%X",jiamibuf1[i]);
printf("\n");
}
return 0;
}