Jnative调用delphi编译的dll解密方法

最近开发的系统需要对字符串进行解密,方法是delphi写的,所以通过JNative调用dll进行解密。

开发环境是64位操作系统、eclipse。

首先将dll文件拷贝到system32目录下,然后从本地读取需要解密的文件内容。

java代码:FileUtil

/**
	 * 读取文件
	 * 
	 */
	public static StringBuffer ReadTxtFile(String FileName) throws Exception {
		FileReader fr = new FileReader(FileName);
		BufferedReader br = new BufferedReader(fr);
		char[] buffer = new char[1024];
		StringBuffer sb = new StringBuffer();
		int len = 0;
		while ((len = br.read(buffer)) != -1) {
			sb.append(buffer, 0, len);
		}
		if (br != null) {
			br.close();
		}
		if (fr != null) {
			fr.close();
		}
		return sb;
	}

去掉特殊字符(换行),就是因为这个问题调了好几天,报各种错,最后发现竟然是换行不能处理!

//StringUtil

 public static String replaceBlank(String str) {
	        String dest = "";
	        if (str!=null) {
	            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
	            Matcher m = p.matcher(str);
	            dest = m.replaceAll("");
	        }
	        return dest;
	    }
最后使用JNative调用dll方法 
CommonFunction

	public static String decrypt(String source, String dllName, String dllMethod, String key) {
		System.setProperty("jnative.debug", "true");
		String s = "";
		if (StringUtil.isNotBlankAll(dllName, key)) {
			JNative jn;
			try {
				jn = new JNative(dllName, dllMethod);//dll文件名、方法名
				jn.setRetVal(Type.STRING);
				jn.setParameter(0, Type.STRING, source);//参数1
				jn.setParameter(1, Type.STRING, key);//参数2
				jn.invoke();
				s = jn.getRetVal();
				jn.dispose();
			} catch (NativeException e) {
			} catch (IllegalAccessException e) {
			}
		}
		return s;
	}

public static void main(String[] args) throws Exception {
		StringBuffer source = FileUtil.ReadTxtFile("D://a.abs");
		String sources = source.toString();
		String s = CommonFunction.decrypt(StringUtil.replaceBlank(sources), "abc.<span style="font-family: Arial, Helvetica, sans-serif;">dll</span><span style="font-family: Arial, Helvetica, sans-serif;">",  "methodname", “param1”);</span>
		System.out.println(s);
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值