test.cpp

来自「tea 加密算法 qq使用的就是这个加密算法来 解决登陆问题」· C++ 代码 · 共 92 行

CPP
92
字号
#include <iostream>
using namespace std;

void code(long *v,long *k);
void decode(long *v,long *k);

int main()
{
/*
910B5AAB
ABC172F4
6131ABF3
A8D0B076

4893058C 
B310D680

41811AE0
D8923481

A722E9E5
E3020604

1783ECDA
CF1D4AB5 */



	long v1[2] = {0x4893058C, 0xB310D680};
	long v2[2] = {0x41811AE0, 0xD8923481};
	long v3[2] = {0xA722E9E5, 0xE3020604};
	long v4[2] = {0x1783ECDA, 0xCF1D4AB5};
	long k[4] = {0x910B5AAB, 0xABC172F4, 0x6131ABF3, 0xA8D0B076};
	//code(v,k);
	decode(v1,k);
	decode(v2,k);
	decode(v3,k);
	decode(v4,k);
	/*long v1[2] = {0xD8923481,0x41811AE0 };
	long v2[2] = {0xB310D680, 0x4893058C};
	long v3[2] = {0xA8D0B076 , 0x6131ABF3};
	long v4[2] = { 0xABC172F4,0x910B5AAB};

	long k[4] = {0xCF1D4AB5,0x1783ECDA,0xE3020604,0xA722E9E5 };
	
	decode(v1,k);
	decode(v2,k);
	decode(v3,k);
	decode(v4,k);*/
}

void code(long* v, long* k)					//k四位,v两位
{
	unsigned long y=v[0],z=v[1], sum=0,		/* set up */
		delta=0x9e3779b9, n=16 ;			/* a key schedule constant */
	while (n-->0) 
	{										/* basic cycle start */
		sum += delta ;
		y += ((z<<4)+k[0]) ^ (z+sum) ^ ((z>>5)+k[1]) ;
		z += ((y<<4)+k[2]) ^ (y+sum) ^ ((y>>5)+k[3]) ;	/* end cycle */
	} 
	v[0]=y ; 
	printf("y: %x\n",y);
	v[1]=z ; 
	cout<<"z:"<<hex<<z<<endl;
}

void decode(long* v,long* k)
{
	unsigned long n=16, sum, y=v[0], z=v[1],delta=0x9e3779b9 ;
	if(n==16) sum = delta<<4;
	if(n==32) sum = delta<<5 ;							
	while (n-->0) {

		z-= (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ; 
		y-= (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ;
		sum-=delta ;  
	}										/* end cycle */
	v[0]=y ; 
	v[1]=z ;
	/*cout<<(char)117<<endl;
	cout<<(char)((y&(0xff000000))>>24);
	cout<<(char)((y&(0x00ff0000))>>16);
	cout<<(char)((y&(0x0000ff00))>>8);
	cout<<(char)((y&(0x000000ff))>>0);
	cout<<(char)((z&(0xff000000))>>24);
	cout<<(char)((z&(0x00ff0000))>>16);
	cout<<(char)((z&(0x0000ff00))>>8);
	cout<<(char)((z&(0x000000ff))>>0);*/
}

⌨️ 快捷键说明

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