免责声明:此文档的目的是为了分析TX常用的TEA算法,参考信息全部根据网上公开的资料,关键信息也做了过滤,不存在任何攻击和泄密。
TEA这个简单加密算法在中国如此有名,大概主要因为腾讯在大量协议,本地数据中使用这个算法。网上很多人甚至直接将TX的加密算法称为TEA算法。
TX的算法,数据分块的加密的确采用的是TEA(第一代)算法,密钥16个字节,每次处理的分块数据是8个字节(2个32位整数),但标准的TEA算法推荐处理的轮数是32轮甚至64轮,而腾讯使用的是16轮。应该是为了加快速度。
腾讯的加密算法,是于一个数据流(BUFFER)的处理,采用的的是改进CBC的算法(看见一片blog称这个是交织算法,很贴切)。你可以这样认为TEA这类对称加密算法是针ECB的(Electroniccodebook),是处理一个定长的数据块的。但如果如果对于流数据只采用ECB算法是有巨大风险的,因为对称加密算法的本质是相同的原文和密钥,得到的密文肯定一致,如果对于流数据,单纯的分块处理,很容易让人伪造密文数据(维基上都有人针对某个图片做ECB预算,对比原图和加密后的图像,你仍然可以从密文图片上看出很多信息)。CBC算法对于这个问题的改造是在密文前面加入一个随机数生成的初始化向量IV(Initialization Vector),通过ECB算法得到的密文半成品要和前一个密文,(包括IV)进行异或预算预算得到密文,因为随机数每次都不一致。这样你可以认为密文是永远不会重复的,而且这样伪造的难度大大提升。另外CBC的算法是在ECB的基础上的,所以如果你的长度不足以填充一个块&#