加密算法哪个好(加密算法)

导读 大家好,精选小编来为大家解答以上问题。加密算法哪个好,加密算法很多人还不知道,现在让我们一起来看看吧!1、TEA算法使用64位明文块和12

大家好,精选小编来为大家解答以上问题。加密算法哪个好,加密算法很多人还不知道,现在让我们一起来看看吧!

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、 }

本文到此结束,希望对大家有所帮助。