当前位置: 首页 >> 程序设计 >> QQ加密算法浅谈-TEA加解密算法
 

QQ加密算法浅谈-TEA加解密算法

作者:      来源:zz     发表时间:2007-01-31     浏览次数:      字号:    

QQ加密算法浅谈(TEA加解密算法)

Tencent QQ的加密算法就采用了TEA算法
 
TEA(Tiny Encryption Algorithm) 是一种优秀的数据加密算法,虽然它比 DES(Data Encryption Standard) 要简单得多, 但有很强的抗差分分析能力,加密速度也比 DES 快得多,而且对 64 位数据加密的密钥长达 128 位,安全性相当好。
 
Pascal(Delphi)代码如下:ntohl函数来自winsock单元
type
  TLongintArray = array[0..3] of Longword;
  PLongintArray = ^TLongintArray;
 
procedure Encipher(v, k, w: PLongintArray);
var
  y, z, a, b, c, d, sum, delta: Longword;
  n: Longint;
begin
  y := ntohl(v^[0]);  z := ntohl(v^[1]); a := ntohl(k^[0]);  b := ntohl(k^[1]);
  c := ntohl(k^[2]);  d := ntohl(k^[3]);  sum := 0;  delta := $9E3779B9;
  for n := 1 to 16 do
  begin
    Inc(sum, delta);
    Inc(y, ((z shl 4) + a) xor (z + sum) xor ((z shr 5) + b));
    Inc(z, ((y shl 4) + c) xor (y + sum) xor ((y shr 5) + d));
  end;
  w^[0] := htonl(y);
  w^[1] := htonl(z);
end;
procedure Decipher(v, k, w: PLongintArray);
var
  y, z, a, b, c, d, sum, delta: Longword;
  n: Longint;
begin
  y := ntohl(v^[0]);  z := ntohl(v^[1]);  a := ntohl(k^[0]);  b := ntohl(k^[1]);
  c := ntohl(k^[2]);  d := ntohl(k^[3]);  sum := $E3779B90;  delta := $9E3779B9;
  for n := 1 to 16 do
  begin
    Dec(z, ((y shl 4) + c) xor (y + sum) xor ((y shr 5) + d));
    Dec(y, ((z shl 4) + a) xor (z + sum) xor ((z shr 5) + b));
    Dec(sum, delta);
  end;
  w^[0] := htonl(y);
  w^[1] := htonl(z);
end;
 
C/C++代码如下:
void encipher( unsigned long * const v, const unsigned long * const k )
{
    register unsigned long y = v[0], z = v[1], sum = 0, delta = 0x9E3779B9,
        a = k[0], b = k[1], c = k[2], d = k[3], n = 32;
    while ( n-- > 0 )
    {
        sum += delta;
        y += ( z << 4 ) + a ^ z + sum ^ ( z >> 5 ) + b;
        z += ( y << 4 ) + c ^ y + sum ^ ( y >> 5 ) + d;
    }
    v[0] = y;
    v[1] = z;
}
void decipher( unsigned long * const v, const unsigned long * const k )
{
    register unsigned long y = v[0], z = v[1], sum = 0xC6EF3720, delta = 0x9E3779B9,
        a = k[0], b = k[1], c = k[2], d = k[3], n = 32;
    // sum = delta << 5, in general sum = delta * n
    while ( n-- > 0 )
    {
        z -= ( y << 4 ) + c ^ y + sum ^ ( y >> 5 ) + d;
        y -= ( z << 4 ) + a ^ z + sum ^ ( z >> 5 ) + b;
        sum -= delta;
    }
    v[0] = y;
    v[1] = z;
}

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •