📄 tea.cpp
字号:
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
#include <iostream.h>
#define NM 8
#define LENGTH_OF_TEXT 20
struct LONGWORD
{
long x;
long y;
};
void tea()
{
long y = 1209398;
long z = 3209090;
long sum = 0;
long Delta=0x9E3779B9;
long a = 7829489;
long b = 2398298;
long c = 3289993;
long d = 4893849;
char pstr[]="杨翠罗";
cout<<pstr<<endl;
printf("%x\n",pstr);
DWORD dd=0x12fed0;
printf("%s\n",dd);
int n = 32;
DWORD ads=0x9E3779B9;
UINT32 data = 0x9E3779B9;
cout<<data<<endl;
BYTE byte = 70;//32326
cout<<"byte = "<<byte<<endl;
cout<<(byte&(0xff00)>>8)<<endl;
cout<<y<<" "<<z<<" "<<sum<<" "<<Delta<<" "<<ads<<endl;
printf("%x\n",ads);
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
}
void DwordToByte(DWORD data,BYTE bytes[4])
{
int i = 0;
for(i = 0;i < 4;i ++)
bytes[i] = 0;
bytes[0] = (BYTE)(data>>0);
bytes[1] = (BYTE)(data>>8);
bytes[2] = (BYTE)(data>>16);
bytes[3] = (BYTE)(data>>24);
printf("%x 转换成Byte为: ",data);
for(i = 0;i < 4;i ++)
{
BYTE bits[2];
bits[0] = bytes[4-i-1]&0x0F;
bits[1] = (bytes[4-i-1]&0xF0)>>4;
for(int j = 1;j > -1; j--)
{
switch(bits[j])
{
case 0x00:
printf("0000");
break;
case 0x01:
printf("0001");
break;
case 0x02:
printf("0010");
break;
case 0x03:
printf("0011");
break;
case 0x04:
printf("0100");
break;
case 0x05:
printf("0101");
break;
case 0x06:
printf("0110");
break;
case 0x07:
printf("0111");
break;
case 0x08:
printf("1000");
break;
case 0x09:
printf("1001");
break;
case 0x0A:
printf("1010");
break;
case 0x0B:
printf("1011");
break;
case 0x0C:
printf("1100");
break;
case 0x0D:
printf("1101");
break;
case 0x0E:
printf("1110");
break;
case 0x0F:
printf("1111");
break;
default:
break;
}
}
printf(",");
// printf("%x\t",bytes[4-i-1]);
}
printf("\n");
}
DWORD BytesToDword(BYTE bytes[4])
{
DWORD result = 0;
for(int i = 0;i < 4;i ++)
{
result=(DWORD)(result << 8);
result +=(DWORD)(bytes[4-i-1] & 0x000000ff);
}
printf("将");
for(i = 0;i < 4;i ++)
printf("%x\t",bytes[4-i-1]);
printf("转换成DWORD为: %x\n",result);
return result;
}
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;
}
DWORD leftRotate(DWORD data,int n)
{
if(n<= 0)
return data;
else
{
DWORD result =data;
// BYTE bytes[4]={0};
// DwordToByte(data,bytes);
printf("%x\n",result);
for(int i = 0;i < n;i ++)
{
result = result << (0x1);
printf("%x\n",result);
}
return result;
}
}
void Encrypt(DWORD v[2],DWORD k[4])
{
int len = 0;
printf("Before Encryption :\n");
for(int i = 0;i < 2;i ++)
printf("%x ",v[i]);
printf("\n");
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;
// leftRotate(z,4);
FILE *fp = fopen("encrypt.txt","w");
if(fp == NULL)
exit(0);
fprintf(fp,"%x %x\n",y,z);
printf("y = %x,z = %x\n",y,z);
while(n-- > 0)
{
cout<<endl<<"-------------------第"<<NM-n<<"加密次迭代----------------------"<<endl;
BYTE bytes[4]={0};
sum = sum+Delta;
printf("y = %x : ",y);
DwordToByte(y,bytes);
printf("\n");
printf("z << 4 = %x : ",z<<4);
DwordToByte(z<<4,bytes);
printf("\n");
printf("a ^ z = %x : ",a^z);
DwordToByte(a^z,bytes);
printf("\n");
printf("sum^(z>>5) = %x : ",sum^(z>>5));
DwordToByte(sum^(z>>5),bytes);
printf("\n");
printf("b = %x\t\t:\t",b);
DwordToByte(b,bytes);
printf("\n");
y += (z << 4) + (a^z) + (sum^(z >> 5)) + b;
printf("y = %x : ",y);
DwordToByte(y,bytes);
printf("\n");
printf("z = %x\t: ",z);
DwordToByte(z,bytes);
printf("\n");
printf("y << 4 = %x : ",y<<4);
DwordToByte(y<<4,bytes);
printf("\n");
printf("y >> 5 = %x : ",y>>5);
DwordToByte(y>>5,bytes);
printf("\n");
printf("c ^ y = %x : ",c^y);
DwordToByte(c^y,bytes);
printf("\n");
printf("sum^(y>>5) = %x : ",sum^(y>>5));
DwordToByte(sum^(y>>5),bytes);
printf("\n");
printf("d = %x\t\t:\t",d);
DwordToByte(d,bytes);
printf("\n");
printf("z = %x : ",z);
DwordToByte(z,bytes);
printf("\n");
z += (y << 4) + (c^y) + (sum^(y >> 5)) + d;
printf("y = %x,z = %x\n",y,z);
fprintf(fp,"%x %x\n",y,z);
char temp[5]={'\0'};
DwordToChar(y,temp);
cout<<temp;
DwordToChar(z,temp);
cout<<temp<<endl;
}
v[0] = y;
v[1] = z;
printf("After Encryption :\n");
for(i = 0;i < 2;i ++)
printf("%x",v[i]);
printf("\n");
fclose(fp);
}
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;
FILE *fp = fopen("Decrypt.txt","w");
if(fp == NULL)
exit(0);
fprintf(fp,"%x %x\n",y,z);
printf("Before Decryption :\n");
for(int i = 0;i < 2;i ++)
printf("%x ",v[i]);
printf("\n");
int n = NM;
for(i = 0;i < n;i ++)
sum +=Delta;
printf("y = %x,z = %x\n",y,z);
while(n-- > 0)
{
//printf("z<<4 = %x,z>>5 = %x,y<<4 = %x,y>>5 = %x\n",z<<4,z>>5,y<<4,y>>5);
cout<<endl<<"-------------------第"<<NM-n<<"解密次迭代----------------------"<<endl;
BYTE bytes[4]={0};
printf("y = %x : ",y);
DwordToByte(y,bytes);
printf("\n");
printf("y << 4 = %x : ",y<<4);
DwordToByte(y<<4,bytes);
printf("\n");
printf("y >> 5 = %x : ",y>>5);
DwordToByte(y>>5,bytes);
printf("\n");
printf("z = %x\t: ",z);
DwordToByte(z,bytes);
printf("\n");
printf("a = %x\t\t:\t",a);
DwordToByte(a,bytes);
printf("\n");
printf("a ^ z = %x : ",a^z);
DwordToByte(a^z,bytes);
printf("\n");
printf("z << 4 = %x : ",z<<4);
DwordToByte(z<<4,bytes);
printf("\n");
printf("z >> 5 = %x : ",z>>5);
DwordToByte(z>>5,bytes);
printf("\n");
printf("sum = %x : ",sum);
DwordToByte(sum,bytes);
printf("\n");
printf("sum^(y>>5) = %x : ",sum^(y>>5));
DwordToByte(sum^(y>>5),bytes);
printf("\n");
z -=((y<<4) + (c^y) + (sum^(y>>5)) + d);
y -=((z<<4) + (a^z) + (sum^(z>>5)) + b);
sum = sum-Delta;
printf("y = %x,z = %x\n",y,z);
fprintf(fp,"%x %x\n",y,z);
char temp[5]={'\0'};
DwordToChar(y,temp);
cout<<temp;
DwordToChar(z,temp);
cout<<temp<<endl;
}
v[0] = y;
v[1] = z;
fclose(fp);
printf("After Decryption :\n");
for(i = 0;i < 2;i ++)
printf("%x",v[i]);
printf("\n");
}
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] ="郭会林和杨翠罗";
int i = 0;
int j = 0;
char temp[5] ={'\0'};
printf("plaintext = 0x%x\n",plaintext);
cout<<plaintext<<endl;
int len = 0;
DWORD v[2] ={0x12fed8,0x12fed8};
DWORD k[4]={0x61,0x62,0x63,0x64};
len = strlen(plaintext);
//cout<<strlen(plaintext)<<" "<<lstrlen(plaintext)<<endl;
//copyChar(temp,plaintext,8,12);
cout<<temp<<endl;
char result[100]={'\0'};
/*
for(i = 0;i < len;i += 8)
{
memset(temp,'\0',sizeof(char));
copyChar(temp,plaintext,i,i+4);
v[0] = CharToDword(temp);
memset(temp,'\0',sizeof(char));
copyChar(temp,plaintext,i+4,i+8);
v[1] = CharToDword(temp);
memset(temp,'\0',sizeof(char));
DwordToChar(v[0],temp);
converge(result,temp,5);
cout<<temp<<endl;
memset(temp,'\0',sizeof(char));
DwordToChar(v[1],temp);
converge(result,temp,5);
cout<<temp<<endl;
}
*/
cout<<"result "<<result<<endl;
cout<<k<<endl;
cout<<"加密前的字符串:"<<endl;
copyChar(temp,plaintext,0,4);
cout<<temp;
v[0] = CharToDword(temp);
copyChar(temp,plaintext,4,8);
cout<<temp<<endl;
v[1] = CharToDword(temp);
Encrypt(v,k);
cout<<"加密后的字符串:"<<endl;
DwordToChar(v[0],temp);
cout<<temp;
DwordToChar(v[1],temp);
cout<<temp<<endl;
Decrypt(v,k);
cout<<"解密后的字符串:"<<endl;
DwordToChar(v[0],temp);
cout<<temp;
DwordToChar(v[1],temp);
cout<<temp<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -