转载自:
http://hi.baidu.com/nathan2007/blog/item/cf6814c73263c8ddd0006063.html
作者: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就可以将其解密了。