NodeJS 实现 客户端 js 加密

2017-01-09 19:17:40来源:cnblogs.com作者:highsea人点击

NodeJS 实现 客户端 js 加密

思路:

  • 服务端渲染业务代码js =>
  • 前后端约定加密算法 =>
  • 业务代码进行签名 =>
  • 客户端解密业务代码 =>
  • eval 执行

Node 路由示例:

/** * 请自定义 restful API 这里以 GET 为例 * @param  {req} * @param  {res} * @return {next()} *///var util = require('utility');exports.encryption = function(req, res){    //GET    var name = req.query.name        , jsStr // 用于 服务端渲染的 js 脚本        , doc = {            n : '支持请求参数',        };    // isSafe : 常规安全字符判断    if (fun.isSafe(name)) doc['n'] = name;    /////////////////需要加密的js 业务代码 start/////////////////////     jsStr = function(n){        alert('开始执行业务代码~')        // 参数 N 可以是某些 之前需要 服务端渲染的 信息        function sayHello(s){            alert('您输入了: '+s);        }        sayHello(n);    }    //////////////////需要加密的js 业务代码 end////////////////////     jsStr = '('+jsStr.toString()+')("'+( name ? doc.n : '默认的')+'")';        var key = util.md5('highsea90'+Date.now())    var resStr = myFromCharCode(key,  jsStr);    res.render('cm/eval',{        title : 'js 加密 demo',        charCode : escape(myFromCharCode.toString()),        data : escape(resStr),        key : key    })    };    /**     * @param  {m}密钥     * @param  {text}文本     * @return {last}加密文本     */    function myFromCharCode (m, text){        var last = '';        for (var i = 0 , l = text.length; i < l; i++) {            for (var j = 0, k = m.length; j < k; j++) {                var key = m.charCodeAt(j)                    , text2 = text.charCodeAt(i) ^ key            }            last += String.fromCharCode(text2);        }        return last;    }

客户端 页面示例:

<!DOCTYPE html><html><head>    <title><%=title%></title></head><body><script type="text/javascript">    // 执行 约定的 加密算法    eval(unescape("<%=charCode%>"));    // 服务端加密后的 字符串 用约定的 算法进行解密    var str = myFromCharCode("<%=key%>", unescape("<%=data%>"));    // 执行业务代码    eval(str);</script></body></html>

代码演示

一个小录像:

加密录像演示


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台