当前位置:首页 » 密码管理 » jstea加密

jstea加密

发布时间: 2023-09-09 02:13:44

1. TEA加密算法的介绍

TEA算法由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明。它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密是不同,该加密算法的迭代次数可以改变,建议的迭代次数为32轮。

2. 电子邮件证书有哪些功能

电子邮件证书是在互联网上证明电子邮件身份的唯一标识,用于加强身份认证,大大降低大型网站和各企事业单位部署基于客户端证书的强身份认证技术的成本,从而快速推动基于客户端证书的强身份认证技术在企业管理信息系统中的普及应用。

电子邮件证书主要是用来对电子邮件通信进行加密和数字签名的,为用户和员工提供双因素身份验证,保护通过网络发送的重要公司文档,并进行身份验证以确保他们有权访问在线服务器。

安全电子邮件证书应用

电子邮件证书应用范围比较广,适用于各行各业的电子邮件。电子邮件证书利用PKI的公钥加密技术,以电子邮件证书作为公钥的载体,发件人使用邮件接收者的数字证书中的公钥对电子邮件的内容和附件进行加密,加密后的邮件只能由接收者持有的私钥才能解密,因此只有邮件接收者才能阅读,其他人截获该邮件看到的只是加密后的乱码信息,这样就可确保电子邮件在传输过程中不被他人阅读,防止了机密信息的泄露

3. TEA是什么

要是说英语的话应该是茶的意思吧。不过它也是Trust Email Available的简写,这是天威诚信推出誉困闹的一款邮件安全证书,而且是一款即插即用,高强度安全的硬证书,可以保证电子邮件内容的真庆罩实、保密、完整及不可否认。
TEA可以直接面向所有对电子邮件有安全需求的用户,如公司、企业、政府的商务、财务、法律及管理人员,或其他可能接触保密信息(如合约、财务信息、机密信息等)的人员。持有TEA的用户可以通过签名和尺租加密操作实现对电子邮件的签名及加密等有效管理。

4. 如何破解sqlite数据库文件

针对sqlite数据库文件,进行加密。现有两种方案如下:

1.对数据库中的数据进行加密。
2.对数据库文件进行加密

1.uin怎么获取?

这个uin不是登录的帐号,而是属于内部的、程序界面上不可见的一个编号。

至于查看,最简单的方法就是登录web微信后,按F12打开网页调试工具,然后ctrl+F搜索“uin”,可以找到一串长长的URL,里面的uin就是当前登录的微信的uin。


有一种方法就是配置文件里,导出的微信目录下有几个cfg文件,这几个文件里有保存,不过是java的hashmap,怎么解析留给小伙伴们自己琢磨吧,

还有就是有朋友反应退出微信(后台运行不叫退出)或者注销微信后会清空这些配置信息,所以小伙伴们导出的时候记得在微信登陆状态下导出。博主自己鼓捣了一
个小程序来完成解析。

2.一个手机多个登录帐号怎么办(没有uin怎么办)


据博主那个解密的帖子,必须知道串号和uin。串号好说,配置中一般都有可以搞到,uin从配置中读取出来的时候只有当前登录的或者最后登录的,其他的几
个记录都没办法解密。网上某软件的解决方法是让用户一个一个登录后再导出。这个解决方法在某些情况下是不可能的,或者有时候根本不知道uin。

后来经过一个朋友的指点,博主终于发现了解决方法,可以从配置中秒读出来这个uin,这个方法暂时不透漏了,只是说明下这个异常情况。

3.串号和uin怎么都正确的怎么还是没办法解密


说说串号这个玩意,几个热心的朋友反馈了这个问题,经过博主测试发现不同的手机使用的不一定是IMEI,也可能是IMSI等等,而且串号也不一定是标准的

15位,可能是各种奇葩,比如输入*#06#出来的是一个,但是在微信程序里用的却是另一个非常奇葩的东西,这种情况多在双卡双待和山寨机中出现,经过严
格的测试,现在已经能做到精确识别,那几位热心的朋友也赠与了不同的代码表示鼓励。

4.计算出来了正确的key为什么无法打开数据库文件


信这个变态用的不是标准的sqlite数据库,那个帖子也提到了不是数据库加密,是文件的内容加密,其实是sqlcipher。官方上竟然还卖到
149$,不过倒是开放了源码,水平够高的可以自己尝试编译。google还能搜索到sqlcipher for
windows这个很好编译,不过博主不知是长相问题还是人品问题,编译出来的无法打开微信的数据库,后来改了这份代码才完成。

5.数据库文件内容是加密的,怎么还原


个是某些特殊情况下用到的,比如聊天记录删除了数据库中就没了,但是某个网友测试说数据库无法查询出来了,但是在文件中还是有残留的。这个情况我没测试
过,不过想想感觉有这个可能,就跟硬盘上删除了文件其实就是删除了文件的硬盘索引,内容还是残留在硬盘上可以还原一样,sqlite数据库删除的条目只是
抹去了索引,内容还存在这个文件中。

网上的都是直接打开读取,并没有解密还原这个文件成普通的sqlite数据库,使用sqlcipher
的导出方法也只是将可查询的内容导出。后来博主花了时间通读了内容加密的方式,做了一个小程序将加密的文件内容直接解密,不操作修改任何数据,非数据库转
换,直接数据流解密,完全还原出来了原始的未加密的数据库文件,大小不变,无内容损失,可以直接用sqlite admin等工具直接打开。

6.已经删除的聊天内容可以恢复么

通过上述第5的方式还原出原数据后,经测试可以恢复。sqlite的删除并不会从文件中彻底删掉,而是抹掉索引,所以可以通过扫描原始文件恢复。前提是没有重装过微信。。。

两种加密方式的优缺点,比较如下:

一、对数据库中的数据进行加密

优点:

1.实现数据加密快速,只需添加两个方法

一是:对明文数据进行加密返回密文数据

二是:对密文数据进行解密返回明文数据

2.程序无需进行太大变动,仅在对数据进行添加,修改,删除,查询时。针对指定的表字段进行修改进行加密,解密的字段即可。

不足:

1.由于对数据进行了加密。所以为了看到明文,必须密文进行解密。因此会增加处理器的消耗。因终端手机的处理能力有限,可能会出现处理数据缓慢的现象发生。

2.仅仅对数据进行了加密,还是可以看到数据表的sql语句,可能猜测到表的作用。另外,如果没有对一个表中的所有字段加密,则可以看没有加密的明文数据。

需要做的工作:

1.无需考虑平台差异性,qt,android,ios都能快速的实现。只需在每个平台上,使用各自的语言,实现同样的加密,解密算法即可。

2.需要对加密算法进行了解,选择一种加密算法,进行实现。

二、对数据库文件进行加密

优点:

1.对整个文件进行了加密,用户通过编辑器看不到任何有用的数据,用户使用sqlite browser软件也无法打开文件查看数据,保证了数据安全。

2.进行打开数据库时,使用程序sqlite3_key(db,”********”,8);即可对文件解密,对数据表的操作无需进行加密,采用明文即可。

不足:

1.需要修改sqlite的源代码,这个工作难度比较大。

2.需要对修改后的sqlite进行编译,需要对makefile有所了解,手动编写makefile文件,对源程序进行编译。因平台差异性,可能会造成某个平台无法编译生成动态链接库的可能。

3.需要对数据访问层代码进行修改,例如qt平台需要将以前对数据库操作使用的QSqlQuery类,更改为使用sqlite3.h文件中定义操作,对数据库操作。其他平台也一样,都要做这一步的修改。

4.在程序编译时,要加入使用加密的动态链接库(linux为共享库.so文件)windows平台最容易,只需将所使用的dll文件到应用程序中即可。其他平台需要实验,看如何引入库,如果编译。

需要做的工作:

1.修改sqlite源代码,追加对数据库文件进行加密的功能。

2.编译含有加密功能的程序源代码,生成各自平台需要使用的库文件。

3.将加密sqlite库文件引入各自平台中,修改数据库访问层代码。

4.进行程序的部署,测试。

三、数据库加密原理

目前主流的数据库都采用了各种安全措施,主要包括用户认证、访问控制、数据加密存储和数据库操作审计等措施。

用户认证:用户或者程序向数据库提供自己的有效身份证明,数据库鉴别用户的身份是否合法,只有合法的用户才能存取数据

库中的数据。用户认证是所有安全机制的前提,只有通过认证才能进行授权访问和审计。

访问控制:数据库管理系统为不同的用户分配不同的权限,保证用户只能进行授权的访问。目前,一些大型数据库(如Oracle 等)

都采用了基于角色的访问控制机制,即为用户授予不同的角色,如db—owner,security administrator 等,不同的角色允许对数据库执行不同的操作。

数据库加密:用户认证以及访问控制对访问数据库进行了控制,但攻击者可能会利用操作系统或数据库漏洞,或物理接触计算机,而直接接触数据库系统文件,从而可能绕过身份认证和存取控制而直接窃取或篡改数据库内容。对数据库中的数据进行加密是防范这类威胁的有效手段。

数据库操作审计:监视和记录用户对数据库所做的各种操作的安全机制,它记录并存储用户的操作,用于事后分析,以检查导致数据库现状的原因以及提供追踪攻击者的线索。数据库的备份与恢复:当数据库发生不可恢复的故障时,可以将数据库恢复到先前的某个一致性的状态。

四、SQLite 加密

由于SQLite 是开放源码的,并且在其源码中预留了加密接口,我们可以通过实现其预留的加密接口实现口令认证和数据库加密以完善其加密机制。

1.口令认证

SQLite 数据库文件是一个普通文本文件,对它的访问首先依赖于文件的访问控制。在此基础上,再增加进一步的口令认证,即在访问数据库时必须提供正确的口令,如果通过认证就可以对数据库执行创建、查询、修改、插入、删除和修改等操作;否则,不允许进一步的访问。

2.数据库加密

数据库加密有两种方式:

1)在数据库管理系(Data Base Management System,DBMS)中实现加密功能,即在从数据库中读数据和向数据库中写数据时执行加解密操作;

2)应用层加密,即在应用程序中对数据库的某些字段的值进行加密,DBMS 管理的是加密后的密文。
前者与DBMS 结合好,加密方式对用户透明,但增加了DBMS 的负载,并且需要修改DBMS的原始代码;后者则需要应用程序在写入数据前加密,在读出数据后解密,因而会增大应用程序的负载。在此,通过实现SQLite 源码中预留的加密接口,实现DBMS 级的加密。

3.使用xxx-tea 算法加密SQLite 数据库

微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA) 都是分组加密算法,它们很容易被描述,实现也很简单(典型的几行代码)。

TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham在 1994 年设计的。该算法使用
128 位的密钥为 64 位的信息块进行加密,它需要进行 64 轮迭代,尽管作者认为 32
轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为
δ=“(√5 – 1)231”(也就是程序中的 0×9E3779B9)。

之后TEA 算法被发现存在缺陷,作为回应,设计者提出了一个 TEA 的升级版本——XTEA(有时也被称为“tean”)。XTEA 跟
TEA 使用了相同的简单运算,但它采用了截然不同的顺序,为了阻止密钥表攻击,四个子密钥(在加密过程中,原 128 位的密钥被拆分为 4 个 32
位的子密钥)采用了一种不太正规的方式进行混合,但速度更慢了。

在跟描述 XTEA 算法的同一份报告中,还介绍了另外一种被称为 Block TEA 算法的变种,它可以对 32
位大小任意倍数的变量块进行操作。该算法将 XTEA
轮循函数依次应用于块中的每个字,并且将它附加于它的邻字。该操作重复多少轮依赖于块的大小,但至少需要 6
轮。该方法的优势在于它无需操作模式(CBC,OFB,CFB 等),密钥可直接用于信息。对于长的信息它可能比 XTEA 更有效率。

在1998 年,Markku-JuhaniSaarinen 给出了一个可有效攻击 Block TEA 算法的代码,但之后很快 David
J. Wheeler 和 Roger M.Needham 就给出了 Block TEA 算法的修订版,这个算法被称为 XXTEA。XXTEA
使用跟 Block TEA 相似的结构,但在处理块中每个字时利用了相邻字。它利用一个更复杂的 MX 函数代替了 XTEA 轮循函数,MX 使用 2
个输入量。

5. TEA加密算法的应用

QQTEA 算法建立在标准 TEA算法的基础上,使用16轮的加密(这是最低限,推荐应该是32轮)。QQ在使用这个算法的时候,由于需要加密不定长的数据,所以使用了一些常规的填充办法和交织算法。
1 填充算法
如果明文本身的长度不是8的倍数,那么还要进行填充以使其成为8的倍数。以字节为单位,令N=原始字符串+10+填充字节数n,则N应该是8的倍数。
具体的填充方法:第一个字节为:(random()&0xf8)|n,随后填充(n+2)个字节random()&0xff ,后面接原始数据,最后填充7 个字节0x00 。
因为使用了不同的随机数,所以填充的结果使得即使对于相同的明文,密文的结果也会不同。
2 交织算法
消息被分为多个加密单元,每一个加密单元都是8字节,使用TEA进行加密,加密结果与下一个加密单元做异或运算后再作为待加密的明文。

6. QQ工作原理是什么

首先QQ客户端向服务器发送一个请求登录令牌的数据包.服务器返回登录令牌.这个令牌是在服务器端生成的.和客户端的IP地址,版本信息等数据相关.以后会用到这个令牌去进行其他操作.
在QQ客户端得到登录令牌之后.就会向服务器发送一个包含登录信息的登录请求.要求登录.服务顺会首先看看客户端的号码.I守址和版本是否可以在本服务器上进行登录.如果可以的话,就验证客户端的登录信息是否与服务器上保存的登录信息进行比较.匹配的就向客户端返回一个登录成功的数据包.不匹配返回登录失败.因为QQ的服务器有很多台.可能要分管不同的QQ版本.IP等.所以如果客户端的号码.IP地址和版本无法在本服务器进行登录.服务器就返蜀犬吠日一个重定向包.让客户端去另外一台服务器登录.其实整个QQ登录过程就是这么简单的两个步骤.
了解了QQ登录的过程后.我们还需要知道具人本的数据包格式.以便解析出我们需要的数据内容.QQ登录过程的数据包分为头部.内容和尾部三个部分.其中头的格式固定为:0x02客户端版本 命令 序列号 QQ号码. 其中0x02是1个字节的标志;客户端版本2个字节.用于表示QQ客户端的版本;命令2个字节.表示要发送的命令类型.例如请求登录令牌登录请求等;序列号是一个2字节的随机数,在一次QQ会话中通过它来确认回应包是否对应请求包.QQ客户端默认每次加1;QQ号码就是4字节的QQ号.对于服务器来说是每个字段是无所谓的.QQ登录过程数据包的尾部固定为0x03.
1. 请求登录令牌包
包内容就是对一次命令的具体信息,对于第一次发送的请求登录令牌包来说,包命令是0x0062,整个请求包如下所示;
而服务器返回包则相对复杂一些,如下所示;

其中0x18表示登录令牌的长度,现在QQ默认的登录令牌长度是0x18.这个令牌是在服务器端生成的.具体的生成算法我们当然还无从得知,应该是参考了QQ客户端的I守址.端口和其他一些信息生成这个令版的,因为你把在A机器上得到的令牌用到B机器上,你就会登录不了.如果你把A机器上的IP给改了.你照样也登录不了.
2. 登录包.
对于我们嗅探QQ密码来说,最重要的就是这个登录包.在这里包含了和QQ密码相关的信息.登录包的具体结构如下;

其中初始密钥是一个16字节的随机数,用于本身的加密.这里最重要的就是密码密钥加密的一个空字符串.
所谓密码密钥就是用QQ口呤进行两次MD5加密后得到的密文,然后以这个密文作为密钥去加密一个空字符串,这次加密使用了反馈的TEA算法,加密结果放在QQ登录包里,让服务器去验证,由于QQ的加密算法使用特殊的填充机制使用QQ服务器可以验证出用户密码是否正确,这个会在后面进行详细的解释.QQ登录包里面还有一些诸如登录状态,登录令版和很多未知的内容.但是这些对于我们破解QQ密码来说都没有什么太大的作用.
需要特别提到的是,前面的请求登录令牌包是不加密的,而这个登录包除了初始密钥本身以外的部分都要用初始密钥进行加密,加密算法同样是反馈的TEA.
QQ服务器在收到这个登录包之后,首先要用初始密钥解密登录包后面的部分,如果解密成功,就会用保存在服务器上的密信息去解密密码密钥加密的那个空字符串密文,我现在还不确定QQ服务器上保存的是密码明文还是密码密钥.猜测是密码密钥.这样服务器就用密码密钥去解密那段16位密文,如果用户提交的密码是正确的.才可以解密成功.否则解密函数会返回空,认证就失败了.当验证QQ客户端密码准确无误后.就返回一个登录成功包.格式如下:

QQ的加密算法
了解了上面的QQ登录的通信协议之后还不足以破解QQ密码,我们还需要掌握QQ的加密算法.前面提到了,密码密钥是用户密码进行两次MD5加密之后得到的结果.然后再用空个结果作为密钥使用TEA算法进行加密.TEA是Tiny Encrypt Arithmetic的缩写.顾名思义就是一种比较简单的小型加密算法.它用一个16字节的密钥去加密一个8字节的明文.得到一个8字节的密文.也可以反向从密文解密出明文.具体的算法可以到网上搜索查阅.这里就不在赘述了.
但是QQ使用的TEA虽然是标准的TEA.但是QQ却使用了一种自己特殊的填充反馈机制,QQ消息被分为多个加密单元.每一个加密单元都是8字节.使用TEA进行加密.加密结果再作为下一个单元的密钥.如果明文本身的长度不是8的倍数.那么还要进行填充.使其成为8的倍数.填充的时候会用一个32位随机数存放于明文的开始位置.再在明文的最后用0填充为整个长度是8的倍数.由于会向后反馈这样即使对于相同的明文,因为使用了不同的随机数.也会产生完全不同的密文.
使用这种特殊的填充反馈算法所导致的结果就是,一段密文只能用加密它的密钥进行解密.如果使用不正确的密钥.就无法得到正确的填充结果.最常见的就是解密后得到的填充数值不是0,这样就判断解密失败.

7. 为什么说TEA算法安全性高

tea算法在安全学领域,TEA(Tiny Encryption Algorithm)是一种分组加密算法,它的实现非常简单,通常只需要很精短的几行代码。TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。

TEA算法使用64位的明文分组和128位的密钥,它使用Feistel分组加密框架,需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=“(√5 - 1)231”(也就是程序中的 0×9E3779B9)。

之后 TEA 算法被发现存在缺陷,作为回应,设计者提出了一个 TEA 的升级版本——XTEA(有时也被称为“tean”)。XTEA 跟 TEA 使用了相同的简单运算,但它采用了截然不同的顺序,为了阻止密钥表攻击,四个子密钥(在加密过程中,原 128 位的密钥被拆分为 4 个 32 位的子密钥)采用了一种不太正规的方式进行混合,但速度更慢了。

8. 招新——第一次尝试破解tea算法

     物拿正      开始接触逆向分析时,入门级别的一道题目,是一个师兄写的考核题《sotired》,尝试着破解了下,以下是具体的过程。

1、双击发现打不开,应该是linux系统下的文件(事实证明确实如此,我在虚拟机那里验证了一下,随便输入字符串,得到的答案是sorry~,给人crakeme的感觉,哈哈)

2、使用反汇编工具ida64位,将文件拖进去,找到main函数,使用F5大法,得到下面的界面:

看到sorry~和wow!congratulation!的字符串,可以推断出有字符串的对比,看到if语句,没错就是它了,看来temp[k]里面有我们想要的东西(用于匹配比较的正确密文)点进去,得到

这里利用一个小插件lazyida,哈哈哈(我比较懒),得到密文,

在这里需要声明下,因为最后读出来的那个0x00111885B有误(lazyida的原因),其实是0x32111885B才对,所以是 0x572CB9C1, 0x73A6EB63, 0x069E6A55, 0x818E33D9, 0x7ED0A862, 0x3211885B,这些16进制的数就是密文啦!有了密文,我们要破解它,就需要找密钥啦,回去看函数

想象下,用户输入一组字符串,for循环了3次,atoui函数猜测应该是某种转换函数,点进去

果然是移位加密转换,结果是int 型,所以v11[6]的字符数据全部被转换了数字,继续往下

又有3次循环,看到encipher函数应该是加密函数来的,然后传递了两个参数,一个是转化后的v11,另一个v7,这里就可以怀疑了,v7应该是密钥,而且用了引用,难道是地址吗?很奇怪,点进去v7,得到

这里又要怀疑了,前面4个都是?一个数字有4个数据,感觉很像数组的样子,于是尝试一波

转换为数组,然后F5大法刷新下!得到

看来我们的推断是正敏薯确的,v7是一个数组,里面的数据应该是密钥了!到此,我们成功地拿到了密文和密钥了,接下来就是解密罩悔了,解密前需要知道是怎么加密的,回到刚刚的encipher函数,进去

看到这里有人可能要很激动了,这个算法不就是tea算法吗?!(没错,虽然我一开始也不知道,于是我去谷歌了一波!)

tea算法就是把密文结合密钥进行移位再异或的运算,总共进行32轮。解密则是反过来求解,不过需要先算出delta的值,即9e3779b9*32后得到13c6ef3720,明显溢出了(手贱算了下,溢出。tea算法把溢出的忽略了,emmmm,我也不太懂其中的原因,能用先用着,哈哈哈),于是乎,可以写脚本了,打开c++,写入脚本

我们的密文和密钥修改好后,因为有密文有6个16进制的数,所以解密3次,得到结果

好啦,这就是我们的flag了,但是看不懂是吧,没关系,去转换下,谷歌走起!

大家记得把空格消除,然后把它和在一起转化,好啦,虚拟机linux操作系统打开,文件打开,输入flag,得到的就是WOw!congratulation!

以上便是我花了一个下午整理出来的一个逆向题目,希望对大家有帮助,也希望能多多交流哦,嘻嘻~

9. 什么是TEA算法

TEA算法被广泛地应用于计算机数据加密领域,OICQ的数据安全采用了TEA算法。本文讨论了TEA的算法的原理及实现,并揭示了QQ中该算法的应用,本文是灵钥科技公司(www.panakes.com)在即时通信密码研究公开的第一篇论文,今后我们将陆续发表相关的论文及相应的产品。

TEA算法简介
TEA算法是由剑桥大学计算机实验室的DavidWheeler和RogerNeedham于1994年发明.TEA是TinyEncryptionAlgorithm的缩写。特点是加密速度极快,高速高效,但是抗差分攻击能力差。

TEA加密算法是一种分组密码算法,其明文密文块64比特(8字节),密钥长度128比特(16字节)。TEA加密算法的迭代次数可以改变,建议的迭代次数为32轮,尽管算法的发明人强调加密16轮就很充分了。两个TEAFeistel周期算为一轮。图1示例了TEA一轮的加密流程。

以下示例了TEA的C语言加密算法,TEA的解密算法与加密算法类似。

#defineTEA_ROUNDS0x20
#defineTEA_DELTA0x9E3779B9
#defineTEA_SUM0xE3779B90

voidtiny_encrypt(unsignedlong*constv,unsignedlong*constw,
constunsignedlong*constk)
{
registerunsignedlong
y=v[0],
z=v[1],
a=k[0],
b=k[1],
c=k[2],
d=k[3],
n=TEA_ROUNDS,
sum=0,
delta=TEA_DELTA;

while(n-->0){
sum+=delta;
y+=(z<<4)+a^z+sum^(z>>5)+b;
z+=(y<<4)+c^y+sum^(y>>5)+d;
}
w[0]=y;
w[1]=z;
}

TEA算法利用的不断增加的(即源程序中的delta)值作为变化,,就是黄金分割率。它的作用是使得每轮的加密是不同。的准确值可能不太重要。但是在这里,它被初始化为

=0x9e3779b

QQ是如何利用TEA进行加密的?
TEA算法被广泛应用于QQ的数据加密中,QQ采用16轮的TEA算法加密,在这时采取16轮加密时而不采取标准的32轮加密时为了减少验证服务器的压力。QQ在数据加密前采用了密码学中的常用的填充及交织技术,减少加密数据的相关性,增加破译者的破解难度。

下表列出了QQ应用TEA算法几个方面

序号
应用
相关文件

1
通讯报文的加密/解密

2
消息记录的加密/解密
MsgEx.db

3
本地消息密码、首次登录时间、提示内容验证密码
Matrix.db

4
消息备份文件
*.bak

QQ的TEA算法源程序分析
QQ在进行TEA加密前采用ntohl函数对原文数据和加密密钥进行了变换,从网络字节顺序转换位主机字节顺序进行加密后,再通过htonl函数将数据转换为网络字节顺序的数据。

为什么要这样做呢?因为不同的计算机使用不同的字节顺序存储数据。因此任何从Winsock函数对IP地址和端口号的引用和传给Winsock函数的IP地址和端口号均时按照网络顺序组织的。

为防止分析者分析出QQ是采用TEA加密算法的,程序的设计者采用了subeax,61C88647h指令,而不采用Addeax9e3779b9h指令。因为分析者只需要判断9e3779b9h(即是我们前面提的黄金分割率的值)就知道采用了TEA加密算法。

sub_409A43procnear;CODEXREF:sub_409B8C+AEp
;sub_409B8C+109p...

var_10=dwordptr-10h
var_C=dwordptr-0Ch
var_8=dwordptr-8
var_4=dwordptr-4
arg_0=dwordptr8
arg_4=dwordptr0Ch
arg_8=dwordptr10h

pushebp
movebp,esp
subesp,10h
pushebx
pushesi
movesi,[ebp+arg_0]
pushedi
pushdwordptr[esi];netlong
callntohl
pushdwordptr[esi+4];netlong
movedi,eax;y
callntohl
movebx,eax;z
moveax,[ebp+arg_4]
leaecx,[ebp+var_10]
leaesi,[ebp+var_10]
subeax,ecx
mov[ebp+arg_0],4
mov[ebp+arg_4],eax
jmpshortloc_409A7C
;哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:00409A79
loc_409A79:;CODEXREF:sub_409A43+49j
moveax,[ebp+arg_4]

loc_409A7C:;CODEXREF:sub_409A43+34j
pushdwordptr[eax+esi];netlong
callntohl;对k[0],k[1],k[2],k[3]进行ntohl变化,
mov[esi],eax
addesi,4
dec[ebp+arg_0]
jnzshortloc_409A79

push10h;做十六轮TEA运算
xoreax,eax
popecx

loc_409A93:;CODEXREF:sub_409A43+88j
movedx,ebx
movesi,ebx
shredx,5;z>>5
addedx,[ebp+var_C];z>>5+k[1]
subeax,61C88647h;sum=sum+deltadelta:0x9e3779b9
shlesi,4;z<<4
addesi,[ebp+var_10];z<<4+k[0]
xoredx,esi;(z>>5+k[1])^(z<<4+k[0])
leaesi,[eax+ebx];sum+z
xoredx,esi;(z<<4+k[0])^(sum+z)^(z>>5+k[1])
addedi,edx;y+=(z<<4+k[0])^(sum+z)^(z>>5+k[1])

movedx,edi
movesi,edi
shredx,5;y>>5
addedx,[ebp+var_4];y>>5+k[3]
shlesi,4;y<<4
addesi,[ebp+var_8];y<<4+k[2]
xoredx,esi;(y>>5+k[3])^(y<<4+k[2])
leaesi,[eax+edi];(sum+y)
xoredx,esi;(y<<4+k[2])^(sum+y)^(y>>5+k[3])
addebx,edx;z+=(y<<4+k[2])^(sum+y)^(y>>5+k[3])
dececx
jnzshortloc_409A93

pushedi;hostlong
callhtonl
movesi,[ebp+arg_8]
pushebx;hostlong
mov[esi],eax;加密结果
callhtonl
mov[esi+4],eax;加密结果
popedi
popesi
popebx
leave
retn
sub_409A43endp

结论
作为一种分组加密算法,TEA加密算法在其发展的过程中,目前出现了几种针对TEA算法设计的缺陷攻击方法,使得原有的TEA加密算法变得不安全,在过去的十几年中,TEA算法进行了若干次的改进,历经XTEA,BlockTEA,XXTEA几个版本。目前最新的算法是XXTEA。

QQ采用了最初的TEA算法做其核心的加密算法,QQ在采用TEA算法时采用了16轮的加密,其加密复杂度比32轮减了许多。利用TEA算法的设计缺陷,使得快速破解QQ密码成为可能。

值得一提的QQ在利用TEA算法做加密时,采用了交织及随机填充随机数的技术,增加了密码分析者分析难度,从一定程度上保护了信息的安全。

更多信息请访问www.panakes.com

TEA(Tiny Encryption Algorithm) 是一种优秀的数据加密算法,虽然它比 DES(Data Encryption Standard) 要简单得多, 但有很强的抗差分分析能力,加密速度也比 DES 快得多,而且对 64 位数据加密的密钥长达 128 位,安全性相当好。 下面的程序来自卢开澄《计算机密码学》(清华大学出版社)。

补充:为了使这段程序更加实用,我将其整理为几个单元, 分别用于 Delphi 和 C++Builder 。包括对数据流 TMemoryStream 和字符串的加密/解密功能, 对字符串的加密/解密还通过 Base64 编码/解码,保持加密后的字符串仍为字符串。

// v[2] : 64bit data, k[4] : 128bit key

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

10. 轻量级 加密算法 有哪几种

注:(以下内容我是从网上找的,不知道能不能帮到你..这些问题我也不怎么懂!!)
1.AES(Advanced Encryption Standard),
AES是一个使用128为分组块的分组加密算法,分组块和128、192或256位的密钥一起作为输入,对4×4的字节数组上进行操作。AES的每一轮加密都包含4个阶段,分别是AddRoundKey,SubBytes,ShiftRows,和MixColumns。众所周之AES是种十分高效的算法,尤其在8位架构中,这源于它面向字节的设计。
AES 适用于8位的小型单片机或者普通的32位微处理器,并且适合用专门的硬件实现,硬件实现能够使其吞吐量(每秒可以到达的加密/解密bit数)达到十亿量级。同样,其也适用于RFID系统。[3]高效的实现和算法的免费使用为AES在无线局域网和后来出现的相关协议中的应用铺平了道路。
2.DESL(Data Encryption Standard Lightweight Extension),
数据加密标准(DES)是由美国联邦信息处理标准在1976年为美国选出的一种加密算法。作为一个分组加密算法,DES在64位大小的分组快上进行操作,其密钥同样也是64位。[10]DES的大致结构由Feistel网络组成,此网络中包括含有8个S-Boxes的16次完全相同的基本轮回,一次初始排列,一次最终排列和一个独立的密钥次序表。
3.XXTEA
TEA微型加密算法最初是由David Wheeler和Roger Needham在1994年以Fast Software Encryption工作室的名义发表的,设计的重点在于描述与实现的简单性。它是一种分组加密算法,以128位的密钥对64位的分组块进行操作。[6]TEA遭受到等效密钥的困扰——每个密钥与其他是那个密钥是等效的,也就是说有效的密钥长度只有126位。此算法易受到相关密钥(Related Key)攻击法的攻击。

热点内容
怎么看笔记本配置好坏怎么对比 发布:2025-01-23 08:50:00 浏览:514
安卓q用起来怎么样 发布:2025-01-23 08:49:14 浏览:294
foreach数据库 发布:2025-01-23 08:49:05 浏览:741
什么是车棚配置 发布:2025-01-23 08:42:58 浏览:312
智能电视盒子无线网密码在哪里 发布:2025-01-23 08:42:14 浏览:277
代理提取源码 发布:2025-01-23 08:41:35 浏览:62
nas网络服务器为什么贵 发布:2025-01-23 08:00:00 浏览:941
语音服务器未连接如何连接视频 发布:2025-01-23 07:59:11 浏览:883
日流量10万需要什么类型服务器 发布:2025-01-23 07:58:27 浏览:501
服务器获取地址失败 发布:2025-01-23 07:55:18 浏览:850