利用ScriptEngineManager执行js的RSA加密

原创 2016年08月28日 15:14:40

有时候出于各种原因我们需要模拟登陆一个网站,有的网站可能会把密码在前端用js加密后再传输到服务器。此时我们就需要找到对应的js方法,把它针对性的处理,再使用JAVA提供的ScriptEngineManager去执行提取处理后的js方法,得到我们想要的加密后的密码。

以服务器提供exponent和modulus为例,js根据这两个参数对密码进行RSA加密,然后传输给服务器进行解密。首先修改security.js,把window等对象给删掉,因为脚本引擎会提示找不到这些对象,接着把$w.这些也给替换掉,再实例化一个var RSAUtils = {};最后在该js最后面添加一个function基本就可以进行加密操作了,添加的function如下:

function encryptPassword(exponent, modulus,password) {   
         var key = RSAUtils.getKeyPair(exponent, '', modulus);
    	 password = RSAUtils.encryptedString(key, password);
     	 return password;
}


JAVA代码也是非常的简单

                ScriptEngineManager engineManager = new ScriptEngineManager();
		ScriptEngine engine = engineManager.getEngineByName("js");
		InputStream ins = JS.class.getResourceAsStream("/security.js");
		InputStreamReader insReader = new InputStreamReader(ins);
		try {
			engine.eval(insReader);
			engine.eval("var password =encryptPassword('010001','00ce0999652fd6a8fe7a51b040eb4d7536efe2e70d44e6fc96c8c6e778484436d2b4abe35ea2de6d723bae45d1329bd9afa337f8aeb238aff98fa9912eead16f51','123456');");
			String password = engine.get("password").toString();
			System.out.println(password);
		} catch (ScriptException e) {
			e.printStackTrace();
		}




给出

exponent = 010001

modulus=00ce0999652fd6a8fe7a51b040eb4d7536efe2e70d44e6fc96c8c6e778484436d2b4abe35ea2de6d723bae45d1329bd9afa337f8aeb238aff98fa9912eead16f51

加密明文=123456


执行JAVA代码后,得到的密文为

25acbd69510b4133d0e3e80c0febf8907035915d50ce262a2dd8d9340d3caf7c3e93aa45f56493b6bf89234a292034f2f66e64b80cb91917a7f095a2df5fa5f3


密文跟目标网站同样的明文加密后传输的参数一样,大功告成。


security.js 下载地址 http://download.csdn.net/detail/userwyh/9803965


版权声明:本文为博主原创文章,未经博主允许不得转载。

Java语言的动态性支持(一)ScriptEngineManager

一、脚本语言的支持      JSR 223中规范了在Java虚拟机上运行的脚本语言与Java程序之间的交互方式。JSR 233是JavaSE6的一部分,在Java表中API中的包是javax....
  • tbdp6411
  • tbdp6411
  • 2015年07月09日 15:10
  • 2165

JDK6的新特性之十二:脚本语言支持(Scripting)

概述JDK6增加了对脚本语言的支持(JSR 223),原理上是将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等,另外,由于现在是编译成bytecode...
  • Chinajash
  • Chinajash
  • 2007年01月23日 20:53
  • 9559

JAVA使用ScriptEngine 解析脚本

前言最近做一个功能需要把一个数学公式保存到数据库,然后通过java读取数学公式,传入参数进行计算,发现了java中的javax.script,它开始存在于JDK1.6,它可以解析通用的表达式,如三目,...
  • u014792352
  • u014792352
  • 2017年07月07日 11:58
  • 1262

使用ScriptEngineManager解析json

使用ScriptEngineManager可以解析比较复杂的json串,应用比较方便,但是效率不敢说,因为这个方法相当于运行了一次js,会占资源, 代码如下: try { String ...
  • tjcyjd
  • tjcyjd
  • 2014年10月29日 14:33
  • 10217

类 ScriptEngineManager

javax.script 类 ScriptEngineManager java.lang.Object javax.script.ScriptEngineManager publ...
  • xzyxuanyuan
  • xzyxuanyuan
  • 2012年10月11日 20:22
  • 10194

使用jython和ScriptEngineManager在java中执行python

方法一: 使用java内置的ScriptEngineManager进行python脚本调用,只要是在java6及以上即可。 1、 直接运行python语句: /** * 使用ScriptEng...
  • Anlegor
  • Anlegor
  • 2015年03月05日 19:32
  • 2927

利用ScriptEngineManager执行js的RSA加密

有时候出于各种原因我们需要模拟登陆一个网站,有的网站可能会把密码在前端用js加密后再传输到服务器。此时我们就需要找到对应的js方法,把它针对性的处理,再使用JAVA提供的ScriptEngineMan...
  • userwyh
  • userwyh
  • 2016年08月28日 15:14
  • 2378

JDK8新特性 Java调用js

Java 8提供了新的Nashorn JavaScript引擎,使得我们可以在JVM上开发和运行JS应用。Nashorn JavaScript引擎是javax.script.ScriptEngine的...
  • jerryHH_2012
  • jerryHH_2012
  • 2016年06月07日 17:21
  • 2423

Java ScriptEngine 解析js

一、脚本语言的支持      JSR 223中规范了在Java虚拟机上运行的脚本语言与Java程序之间的交互方式。JSR 233是JavaSE6的一部分,在Java表中API中的包是javax.sc...
  • u012660667
  • u012660667
  • 2015年11月13日 18:42
  • 6582

ScriptEngine使用java调用js代码

JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “...
  • u011933341
  • u011933341
  • 2013年12月26日 10:17
  • 3173
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用ScriptEngineManager执行js的RSA加密
举报原因:
原因补充:

(最多只允许输入30个字)