查看文章 |
飞信分析之八:飞信的加密方法
2007年04月01日 23:36
作者:nathan 花了好几天时间终于把飞信加密的密码用非.NET的方式给还原了,并用C++完全实现了一遍,回头把这个C++版的ShowPasswd贴上来。 看到有朋友问到飞信的加密方法,这里就把飞信用的加密和变换的方法一起简要介绍一下。 1.飞信的配置文件的加密方法 飞信的配置文件其实不是加密,只是进行了一下变换。这种变换的编码方法是:将原来的XML文本(UTF-8编码的)进行压缩,然后将压缩后的结果进行 base64编码,编码后的结果作为XML的DocumentElement的值,同时在XML的DocumentElement的Attributes中,加上 StoreMode=1。 压缩采用的是标准GZIP算法,飞信用的是.NET的类库System.IO.Compression.GZipStream。 2.飞信的用户密码的加密方法 我们把飞信的配置文件还原,就会看到保存的密码。这个可是真正的加密了,采用的是TripleDES算法,依然是标准的DES算法,.NET的类库是 System.Security.Cryptography。配置文件中是加密以后的结果的BASE64编码。 加密和解密重要的是KEY和IV。IV (initialization vector)在飞信中是固定的值,KEY的算法是:取当前用户的SID(security identifiers),表示成字符形式(S-1-5-xx-xxxxxxxxx-xxxxxxxxx.....),求这个字串的MD5,KEY即为这个字符串的求MD5 Digest的值。TripleDES是对称加密算法,用同样的KEY和IV就可以将其解密了。 |
最近读者:

