有一些网页前端的登录使用的是RSA加密方式,RSA加密中存在公钥和私钥,一般情况是在网页前端使用公钥将用户名和密码进行加密,在服务器端使用私钥进行解密。
实际使用中,通常将公钥分解为模数和指数,前端登录的过程一般如下:
1、用户在网页输入用户名和密码
2、提交表单后,网页会请求服务器,获取模数和指数
3、通过js脚本计算出公钥,并使用公钥对用户名和密码进行加密后,进行传输。
如果要模拟登录,就需要模拟RSA加密的过程:
1、通过抓包找到登录的实际请求路径,就是加密后数据的传输路径
2、抓包获取RSA加密的js脚本文件
3、在java中通过javax.script包下的ScriptEngine来调用js脚本,模拟计算公钥,并加密的过程。
主要代码片段如下:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
try {
engine.eval(new FileReader(filepath));
engine.eval(js);
return (String) engine.get("username");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ScriptException e) {
e.printStackTrace();
}