QQ协议TEA加密解密代码 C#

     网上找到的qq协议的TEA加密和解密说明如下: 也有很多源代码,但是感觉上代码比较复杂,不容易看。我用C#重写了下。 基于2008协议

     * QQ消息的加密算法是一个16次的迭代过程,并且是反馈的,每一个加密单元是8字节,输出也是8字节,密钥是16字节

     * 我们以prePlain表示前一个明文块,plain表示当前明文块,crypt表示当前明文块加密得到的密文块,preCrypt表示前一个密文块
     * f表示加密算法,d表示解密算法 那么从plain得到crypt的过程是:
     *       crypt = f(plain ^ preCrypt) ^ prePlain
     * 所以,从crypt得到plain的过程自然是
     *       plain = d(crypt ^ prePlain) ^ preCrypt
     * 此外,算法有它的填充机制,其会在明文前和明文后分别填充一定的字节数,以保证明文长度是8字节的倍数
     * 填充的字节数与原始明文长度有关,填充的方法是:
     *
     *      ------- 消息填充算法 -----------
     *      a = (明文长度 + 10) mod 8
     *      if(a 不等于 0) a = 8 - a;
     *      b = 随机数 & 0xF8 | a;              这个的作用是把a的值保存了下来
     *      plain[0] = b;                   然后把b做为明文的第0个字节,这样第0个字节就保存了a的信息,这个信息在解密时就要用来找到真正明文的起始位置
     *      plain[1 至 a+2] = 随机数 & 0xFF;    这里用随机数填充明文的第1到第a+2个字节
     *      plain[a+3 至 a+3+明文长度-1] = 明文; 从a+3字节开始才是真正的明文
     *      plain[a+3+明文长度, 最后] = 0;       在最后,填充0,填充到总长度为8的整数为止。到此为止,结束了,这就是最后得到的要加密的明文内容

     *      ------- 消息填充算法 ------------

 

Code

 

posted @ 2009-11-08 01:00  beikx  阅读(1490)  评论(1编辑  收藏  举报