java调用.dll文件实现解密
由于该类使用到ActiveXComponent,所以我们需要引入jacob.jar
- 引入jar,如果是普通web项目,直接将架包放入lib文件夹下,如果是maven项目,需要将jar本地maven库中
- 将jacob-1.19-x64.dll和decrypt.dll 放入到C:\Windows\System32目录下(64位操作系统)。
- 将jacob-1.19-x84.dll 放入到C:\Windows\SysWOW64目录下(32位操作系统)。
- 将jacob-1.19-x64.dll 放入到jdk/jre/bin目录下。
- cmd命令下注册dll文件
- C:\Windows\System32目录下找到cmd.exe,右键,然后以管理员的身份运行,否则注册不了,如下图所示
- 下面是调用的代码
public class DecryptUtils {
public static String decrypt(String str) {
ActiveXComponent dotnetCom = new ActiveXComponent("WebDecrypt4Java.Decrypt");
Variant var = Dispatch.call(dotnetCom, "DecryptString", str);
String result = var.toString();
return result;
}
public static void main(String[] args){
String str = "x3rC9TILUiHHuYRdOqu9x5A7CFgyh4DUQ==";
System.out.println(DecryptUtils.decrypt(str));
}
}
- 常见错误
Can’t co-create object:是因为regasm在framework及framework64中都有,也是区分32位和64位的,改用64位系统使用framework64注册后调用成功,如系统为32位,则改为framework进行注册。同事需要替换jacob-1.19-x64.dll为32位文件。
Can’t get object clsid from progid:未对C4JavaDecrypt.dll进行注册。 - 在实际的开发过程中发现版本一致,但依旧报Can’t co-create object,网上查阅了大量资料后发现时注册dll文件有问题
用如下命令注册RegAsm.exe C4JavaDecrypt.dll /codebase - 关于regasm.exe
https://blog.csdn.net/kongwei521/article/details/78076626
Java 调用 c#编写的dll文件
https://blog.csdn.net/almahehe/article/details/76281100
常见报错处理
https://blog.csdn.net/boy298/article/details/5168353