今年我们部门的公司级任务就是系统整合。现有信息系统太多:OA(e-cology)、百会CRM、8th Manage项目管理、Kingdee EAS、新为NewWay学习平台、RTX,还有公司自行开发的:开发管理系统、星联平台等。
计划第一期完成单点登录,我们准备采用共取共享密钥的方式。
自有系统实施起来还有些优势,但外购的系统整合进来就有点难度了,主要是不了解其登录过程中的验证机制。硬骨头一个个啃吧。
e-cology:密码为MD5值;加密方式未知的:BaiHui CRM、8th Manage、Kingdee EAS、NewWay、RTX
2010年时,公司也曾计划将学习平台与星联平台整合,实现单点登录。也曾向Newway索取过密码加密算法,对方以可能妨碍系统安全为由拒绝了我们公司的请求。后因人事变动,这个事就没进行下去(当时此任务不是我们部门承接)。不是很牛嘛,先从这个入手吧。
1.首先,通过SQL Server Profiler观察一下Newwey的登录过程,找到了用户表nv_user
select * from nv_user
将newway密文与用Fsum Frontend(SourceForge上开源项目)生成的密文对比,无匹配结果,看来应该不是使用公开的加密算法。
2.Newway是.NET平台开发的,查看一下安装目录,所有的库都在X:\Newway\SmartLearning2009\Web\bin中。这里,再次请出一款开源软件ILSPY(反编译软件)。将newway全部库文件都用ILspy打开,先按Constant以“password”为关键字搜索一下,如下图:
逐个检查一下与newv相关的方法,在newv.web.framework.PersonalPasswordEdit中找到了蛛丝马迹。如下图:
密码是由SymmetricCryptoMethod.Encrypto()方法生成的。
再以SymmetricCryptoMethod为关键字搜索所有Type,如下图:
Oh,My GOD! 大胆猜测Encrypto就是加密方法,Decorypto就是解密方法。通过Decrypto方法就可以轻松将密文还原为原文了,难怪新为不肯提供啦。
3.写个小程序验证一下:
照旧,还是用开源软件,上Sharpdevelop
A.创建一个项目 > Windows 应用程序
B.添加引用:在项目视图 > 引用 中单击右键 > 添加引用 >.NET 集合浏览器,选择newv.common.dll
源代码中添加 using newv.common;
C.打开窗口设计界面,放置2个TextBox控件,设置窗口Load事件,代码如下:
textBox1.Text=newv.common.SymmetricCryptoMethod.Encrypto("321");
textBox2.Text=newv.common.SymmetricCryptoMethod.Decrypto("VtMgJLGNdLEbVy09UYCTug==");
D.运行程序
果然,如我所料Encrypto就是加密方法,Decorypto就是解密方法。
各位管理新为学习平台的同学可不要滥用Decrypto()哟。