关于php与js交互问题
最近几天一直在做cutl模拟登陆的事,遇到一个rsa加密的问题,他的加密文件是security.js。那么问题来了,如何让PHP获取js加密后的结果。
众所周知(很遗憾,基础不好,摔了跤之后才意识到),php是服务端语言,js是客户端语言。两者是风牛马不相及的。最开始,我一直在构思用PHP获取js结果。运气还不错,找到一个。如下:
<?php echo "function encryption(password){
var modulus = \"00b6b7f8531b19980c66ae08e3061c6295a1dfd9406b32b202a59737818d75dea03de45d44271a1473af8062e8a4df927f031668ba0b1ec80127ff323a24cd0100bef4d524fdabef56271b93146d64589c9a988b67bc1d7a62faa6c378362cfd0a875361ddc7253aa0c0085dd5b17029e179d64294842862e6b0981ca1bde29979\";
var exponent = \"010001\";
var key = RSAUtils.getKeyPair(exponent,\"\", modulus);
var password=RSAUtils.encryptedString(key,password);
return password;
};
//PHP传入变量调用
$password = "911219";"var password=\"$password\";encryption(password);";
但是,很遗憾的是,PHP没法获取到js执行结果。那么,就用php的js扩展吧,但是看到网上一大堆blabla。还是算了。那么,重点来了,我们可以用node.js搭个小型服务器,再用PHP获取。
涉及引入多个文件时,按照前端引入顺序,逐个合并文件内容,并把最终结果,放入nodeServer.js最后,然后把调用方法,写入getResult函数。有时候会遇到如window、location.href之类的调用,在如影响数据的情况下,选择性删除即可。
var something = require('./security.js');
var http = require("http");
var url = require('url');
http.createServer(function(request, response) {
var arg = url.parse(request.url, true).query; //arg => { key : "111" }
response.writeHead(200, {"Content-Type": "text/plain"});
var result = getResult(arg.password);
response.write(result + "\n");
response.end();
}).listen(8888);
function getResult(password) {
var modulus = "00b6b7f8531b19980c66ae08e3061c6295a1dfd9406b32b202a59737818d75dea03de45d44271a1473af8062e8a4df927f031668ba0b1ec80127ff323a24cd0100bef4d524fdabef56271b93146d64589c9a988b67bc1d7a62faa6c378362cfd0a875361ddc7253aa0c0085dd5b17029e179d64294842862e6b0981ca1bde29979";
var exponent = "010001";
var key=RSAUtils.getKeyPair(exponent,"", modulus);
var password=RSAUtils.encryptedString(key,password);
return password;
}
node.js有一个问题,就是没有window全局变量,找到global是其支持的全局变量。修改,OK.
node。js中引用js文件。
var something = require('./folder1/folder2/folder3/something.js');