⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tea+

📁 基于C++实现了一个TEA加密算法
💻
字号:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
#include <iostream.h>

#define NM 8//迭代次数
#define LENGTH_OF_TEXT 200

void DwordToChar(DWORD word,char dd[5])
{
dd[0] = (char)((word >> 24)&0xFF);
dd[1] = (char)((word >> 16)&0xFF);
dd[2] = (char)((word >> 8)&0xFF);
dd[3] = (char)((word & 0xFF));
dd[4] = '\0';
}

DWORD CharToDword(char dd[5])
{
DWORD word = 0;

for(int i = 0;i < 4;i ++)
{
     DWORD temp = 0x0;
     temp = temp ^ ((dd[i]+256)%256);
     temp = temp<<(3-i)*8;
     word +=temp;
}
return word;
}

void Encrypt(DWORD v[2],DWORD k[4])
{
int len = 0;
DWORD y = v[0],z=v[1];
DWORD Delta = 0x9E3779B9,sum = 0;
DWORD a = k[0],b=k[1],c=k[2],d=k[3];
int n = NM;

while(n-- > 0)
{
     cout<<endl<<"第"<<NM-n<<"次加密迭代后:";
     BYTE bytes[4]={0};
     sum = sum+Delta;
     y += (z << 4) + (a^z) + (sum^(z >> 5)) + b;
     z += (y << 4) + (c^y) + (sum^(y >> 5)) + d;
     char temp[5]={'\0'};
     DwordToChar(y,temp);
     cout<<temp;
     DwordToChar(z,temp);
     cout<<temp<<endl;
}

v[0] = y;
v[1] = z;
}

void Decrypt(DWORD v[2],DWORD k[4])
{

DWORD y = v[0],z=v[1];
DWORD a = k[0],b=k[1],c=k[2],d=k[3];
DWORD sum = 0x0;
DWORD Delta = 0x9E3779B9;

int n = NM;
int i = 0;
for(i = 0;i < n;i ++)
     sum +=Delta;

while(n-- > 0)
{
  
     cout<<endl<<"第"<<NM-n<<"次解密迭代后:";
     BYTE bytes[4]={0};
     z -=((y<<4) + (c^y) + (sum^(y>>5)) + d);
     y -=((z<<4) + (a^z) + (sum^(z>>5)) + b);
     sum = sum-Delta;
     char temp[5]={'\0'};
     DwordToChar(y,temp);
     cout<<temp;
     DwordToChar(z,temp);
     cout<<temp<<endl;
}
v[0] = y;
v[1] = z; 
}

void copyChar(char *dest,const char *src,int start,int end)
{
if(dest == NULL)
     return;
if(src == NULL)
     return;

int i = 0;
for(i = start;i < end;i ++)
{
     if(*(src+i) == '\0')
      break;
     *(dest+i-start) = *(src+i); 
}
}

void converge(char *dest,const char *src,int size)
{
int i = 0;
int len = strlen(dest);
for(i = 0;i < size;i ++)
{
     dest[len+i]=src[i];
}
}

void main()
{
char plaintext[LENGTH_OF_TEXT] ="我come from中国";
int i = 0;
int j = 0;

cout<<"请输入明文:"<<endl;
cin>>plaintext;

printf("plaintext = 0x%x\n",plaintext);
cout<<plaintext<<endl;

int len = 0;

DWORD v[2] ={0x12fed8,0x12fed8};
DWORD k[4]={0x61,0x62,0x63,0x64};
char code[17]={'\0'};

len = strlen(plaintext);
if(len % 8 != 0)
{
     for(i = len%8;i < 8;i ++)
      plaintext[len+i-len%8]=' ';
}
len = strlen(plaintext);

char afterEncrypt[100] = {'\0'};
char afterDecrypt[100] = {'\0'};
cout<<"请输入加密密码(8个汉字)"<<endl;
cin>>code;

for(i = 0;i < 4;i ++)
{
     char tt[5]={'\0'};
     copyChar(tt,code,i*4,i*4+4);
     k[i] = CharToDword(tt);
}

cout<<"加密前的字符串:"<<endl;
cout<<plaintext<<endl;
for(i = 0;i < len;i+=8)
{
     char temp[5] ={'\0'};
     copyChar(temp,plaintext,i,i+4);
     v[0] = CharToDword(temp);
     copyChar(temp,plaintext,i+4,i+8);
     v[1] = CharToDword(temp);
     Encrypt(v,k);
     DwordToChar(v[0],temp);
     converge(afterEncrypt,temp,5);
     DwordToChar(v[1],temp);
     converge(afterEncrypt,temp,5);
}

cout<<"加密后的字符串:"<<endl;
cout<<afterEncrypt<<endl;
len = strlen(afterEncrypt);

memset(code,'\0',sizeof(char));
cout<<"请输入解密密码(8个汉字)"<<endl;
cin>>code;
for(i = 0;i < 4;i ++)
{
     char tt[5]={'\0'};
     copyChar(tt,code,i*4,i*4+4);
     k[i] = CharToDword(tt);
}

for(i = 0;i < len;i+=8)
{
     char ttemp[5] ={'\0'};
     copyChar(ttemp,afterEncrypt,i,i+4);
     v[0] = CharToDword(ttemp);
     copyChar(ttemp,afterEncrypt,i+4,i+8);
     v[1] = CharToDword(ttemp);
     Decrypt(v,k);
     DwordToChar(v[0],ttemp);
     converge(afterDecrypt,ttemp,5);
     DwordToChar(v[1],ttemp);
     converge(afterDecrypt,ttemp,5);
}
cout<<"解密后的字符串:"<<endl;
cout<<afterDecrypt<<endl; 
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -