近期公司需要挖某网站的数据, 需要模拟登陆,他们的加密方式有点复杂, 不好转java. 研究了下,就直接在java代码里面用他们的加密js代码,这里只贴java中运用的js代码:
/**
* 加密用户名密码
*
* */
private static String testJSFile(String input) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
String c=null;
try {
engine.eval("var keyStr='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';function encodeInp(input){var output='';var chr1,chr2,chr3='';var enc1,enc2,enc3,enc4='';var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else{if(isNaN(chr3)){enc4=64}}output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);chr1=chr2=chr3='';enc1=enc2=enc3=enc4=''}while(i<input.length);return output};");
} catch (Exception e) {
e.printStackTrace();
}
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine;
c = (String)invoke.invokeFunction("encodeInp",input);
System.out.println("c = " + c);
}
return c;
}