Java调用K3Cloud的密码加密算法实现登录密码检验
来源:互联网 发布:知世故不世故什么意思 编辑:程序博客网 时间:2024/05/21 09:33
最近要开始做K3Cloud移动,BOS平台的移动单据收费,就想单独做移动模块,搭建环境:后台SSH2,前端Android。在手机端登录时通过Ajax方式传递用户名和密码到后台校验,后台在去K3Cloud的数据库中进行匹配,那么问题来了!数据库中的密码是经过SHA1加密的,要匹配首先得先把手机客户端传过来的密码加密。呵呵……金蝶的加密方式我们不得而知,就算知道,在Java平台不一定能搞出来,我今天研究了一天发现结果对不上,最后放弃了,决定试试用Java调C#的方法去直接调用K3Cloud封装好的加密工具类。
说了这么多那我们开始吧:
环境、工具:
1、VS 2012
2、eclipse、tomcat
3、Jacob-1.18-M2
一、制作COM组建
1、先创建项目,选择window类库,起名随便哈!
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;using Kingdee.BOS.Util;using Kingdee.BOS;namespace TestCom{ [Guid("E9BCF867-CD81-40d0-9591-ED28D1ED2B53")] public interface IEncrypt { [DispId(1)] string GetEncrypt(string str, string str2); } [Guid("33A6E58D-E1F5-4b53-B2E2-03B9F8BA2FAD"), ClassInterface(ClassInterfaceType.None)] public class Encrypt : IEncrypt { public Encrypt() { } public string GetEncrypt(string passWord, string salt) { string pwd = ConfidentialDataSecurityUtil.GenSecurityPW(passWord, salt); return pwd; } }}
Guid的生成:打开Visual Studio Command Prompt 输入guidgen 命令调出工具。类型选择Registry Format,点击New Guid,然后COPY出来。
[DispId(1)]为函数的标识。如果有多个函数可相应的在函数前面加[DispId(2)], [DispId(3)]…
2、在项目上右击选择属性,选择页签应用程序集-->程序集信息-->勾选“使程序集COM可见”,然后在切换页签到生成-->勾选“为COM互操作注册”。
3、设置强名称:打开Visual Studio Command Prompt 输入:sn -k TestComkey.snk 生成TestComkey.snk 签名文件。
注意:如果项目中引用了其他没有源码的dll文件,并且此dll文件是没有强名称的程序集,则编译时会出现类似 "Assembly generation failed -- 引用的程序集 'Kingdee.BOS.dll' 没有强名称" 这样的错误。
我这里引用的是Kingdee.BOS.dll程序集,它不是强名称的,则需要进行以下操作:
先将K3Cloud站点WebSide目录bin下的Kingdee.BOS.dll文件复制出来放到Visual Studio Command Prompt命令工具的目录。
1.打开打开Visual Studio Command Prompt命令提示窗口;
sn -k Kingdee.BOS.snk
3.反编译目标程序集
ildasm Kingdee.BOS.dll /out=Kingdee.BOS.il
3.重新编译,附带强命名参数
ilasm Kingdee.BOS.il /dll /resource=Kingdee.BOS.res /key=Kingdee.BOS.snk /optimize
4.验证签名信息
sn -v Kingdee.BOS.dll
4、注册TestComkey.snk签名文件:项目--属性--签名,选择刚才生成的TestComkey.snk 文件
注册完后编译项目,会在Debug目录中会生成 TestCom.dll 和TestCom.tlb。
5、手工注册COM:
打开Visual Studio Command Prompt进入Debug目录,运行命令注册:
regasm TestCom.dll /tlb:TestCom.tlb
gacutil -i TestCom.dll (执行这个命令需要TestCom.dll 具有强名称)
gacutil -i Kingdee.BOS.dll (执行这个命令需要TestCom.dll 具有强名称)
二、java 调用 Com
部署jacob
1、在开发环境中引入jacob.jar
2、拷贝jacob-1.18-M2-x64.dll 文件到 C:\Windows\System32目录,如果是Web应用的话还需要拷贝到jdk1.6.0_13\bin目录(jdk安装目录下的bin目录)
3、新建Java类:
package com.fanfan.demo;import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;public class test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubtry{ ActiveXComponent dotnetCom = null; dotnetCom = new ActiveXComponent("TestCom.Encrypt"); Variant var = Dispatch.call(dotnetCom,"GetEncrypt","000000","0002e61f1354ca2b837311e46ad9f343d545"); String str = var.toString(); //返回值 System.out.println(str); } catch (Exception ex) { ex.printStackTrace(); }}}
Dispatch.call(dotnetCom,"GetEncrypt","000000","0002e61f1354ca2b837311e46ad9f343d545");00000就是我的密码,"0002e61f1354ca2b837311e46ad9f343d545"是密码调料,至于啥是密码调料我不知道,反正K3Cloud框架是这么注释的,这个可以通过用户名去查找FMEMO字段获取,每次更改密码这个会变,可以再写个方法专门获取salt。
运行Java代码,控制台输出了000000加密后的密码,然后就可以通过JDBD或者Hibernate访问数据库进行密码匹配了。
效果图:
OK!终于搞定了,老板在也不用担心收费的问题了,直接操作数据库,想干啥干啥。
- Java调用K3Cloud的密码加密算法实现登录密码检验
- java实现密码自动登录,记住密码
- java实现密码自动登录,记住密码
- C#.net实现密码加密算法的语句
- C#.net实现密码加密算法的语句
- WebQQ密码MD5加密算法的C#实现
- 登录检验用户名密码是否存在的源码
- 登录密码检验 SRP算法 简化版
- C#.net实现密码加密算法
- 检验密码强度的代码
- 检验密码强度的代码
- Java实现穷举密码登录FTP服务器
- javascript+Java 实现MD5加密登录密码
- java实现字符串加密,登录密码加密
- javascript+Java 实现MD5加密登录密码
- JAVA下加密算法的实现用例(三)--------单密码体系
- AES加密算法在java,AS,JS中的实现_密码等的加密互解
- AES 加密算法在 java AS JS中的实现_密码等的加密互解
- MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStart
- 关于CppUnit单元测试的一些编译错误以及改正
- storm问题总结
- UIScrollView已经UIPageControl的简单使用
- 调试动态内存
- Java调用K3Cloud的密码加密算法实现登录密码检验
- hdoj.1863 畅通工程【并查集】 20141129
- iOS8中的 Size Class 使用实例
- 异地基本户
- 面试题(3)数字在排序数组中出现的次数
- Android 一个应用启动另外一个应用
- Invalid module format的产生原因
- linux 进程通信
- Storm集群安装部署步骤【详细版】