大家好,精选小编来为大家解答以上问题。加密算法哪个好,加密算法很多人还不知道,现在让我们一起来看看吧!
1、 TEA算法使用64位明文块和128位密钥。它使用Feistel块加密框架,需要64次迭代。在这里,你也可以根据自己的需要设置加密轮数。
2、 该算法使用一个神秘的常数作为倍数,该常数是由黄金分割比得出的,以确保每一轮加密都是不同的。但是的确切值似乎并不重要。这里TEA将其定义为="( 5-1) 231 "(即程序中的0x9e3779b9)。
3、 加密核心功能
4、 void tea_encode(int* v,const int* k)
5、 {
6、 无符号int y=v[0],z=v[1],sum=0,
7、 Delta=0x9e3779b9,//神秘常数为倍数
8、 n=16//在这里设置加密轮数,对应下面的解密轮数。
9、 while(n-0){//循环加密
10、 总和=delta
11、 y=(z4) k[0] ^ z总和^(z5)k[1];
12、 z=(y4) k[2] ^ y和^(y5)k[3];
13、 }
14、 v[0]=y;v[1]=z;
15、 }
16、 解密核心函数
17、 void tea_decode(int* v,const int* k)
18、 {
19、 无符号int y=v[0],z=v[1],sum=0,
20、 Delta=0x9e3779b9,//神秘常数为倍数
21、 n=16//在这里设置加密轮数,对应下面的解密轮数。
22、 while(n-0){////循环加密
23、 z-=(y4) k[2] ^ y和^(y5)k[3];
24、 y-=(z4) k[0] ^ z求和^(z5)k[1];
25、 sum-=delta;
26、 }
27、 v[0]=y;v[1]=z;
28、 }
29、 上面的代码实现了一个64位的包加密算法,但是,对于一串数据,需要用少于9个字节(64位)的数据加密和解密。
30、 void tea_encode_byte(char* v,const int* k,int p){ char y[]=' Guo $ Tea ';//这是一个固定方式写的字符串,只要和解密一样。7个字节的长度是* v=* v y[p](char)(k[p % 4]%0x ff);}
31、 void tea_decode_byte(char* v,const int* k,int p)
32、 { char y[]=' Guo $ Tea ';* v=*v^(char)(k[p%4]%0xff)^y[p];}
33、 下一步是对加密数据进行分组。
34、 //in_buffer=加密数据,in_size=数据长度,key=128位密钥,cipherRemains=是否加密8字节整数以外的数据。
35、 void tea _ encode _ buffer(char * in _ buffer,unsigned int in_size,const int* key,int cipher remains){ char * p;unsigned int remain=in _ size % 8;//计算数据无符号int align _ size=in _ size-remain除了数据的8字节整数伴侣;//块加密长度为(p=in _ bufferp in _ buffer align _ sizep=8)tea_encode((int*)p,key);//8字节块加密//处理超过8字节整数伴侣的数据
36、 if(remain 0 cipher remains)for(p=in _ buffer align _ size;p in _ buffer in _ sizep=1) tea_encode_byte(p,key,-remain);}
37、 下一步是对解密的数据进行分组。
38、 void tea _ decode _ buffer(char * in _ buffer,unsigned int in_size,const int* key,int cipherRemains)
39、 {
40、 char * p;
41、 unsigned int remain=in _ size % 8;//计算数据的8字节整数伴侣以外的数据
42、 unsigned int align _ size=in _ size-remain;//数据包加密的长度
43、 for(p=in _ buffer;p in _ buffer align _ sizep=8)
44、 tea_decode((int*)p,key);//8字节块加密
45、 //处理超过8字节整数伴侣的数据
46、 if(剩余0个密码剩余)
47、 for (p=缓冲区对齐大小;p in _ buffer in _ sizep=1)
48、 tea_decode_byte(p,key,-remain);
49、 }
50、 测试加密/解密
51、 int main()
52、 {
53、 const int ENCRYPT_ARRAY[]={ 1,2,5,1 };//128位密钥
54、 Char* pTestStr='这是一个测试代码字符串,或者是来自文件或其他地方的数据块';
55、 int nlen=strlen(ptest str)1;
56、 char * pData=new char[nlen];
57、 memcpy(pData,pTestStr,nlen);
58、 //加密数据块,并将加密后的数据存储在pData中。
59、 tea_decode_buffer((char*)pData,nlen,ENCRYPT_ARRAY,1);
60、 //解密数据块,并将解密后的数据存储在pData中。
61、 tea_encode_buffer(pData,nlen,ENCRYPT_ARRAY,1);
62、 返回0;
63、 }
本文到此结束,希望对大家有所帮助。