NodeJS实现客户端js加密


Posted in NodeJs onJanuary 09, 2017

思路:

  • 服务端渲染业务代码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 可以是某些 之前需要 服务端渲染的 信息
 // 比如 自产 的 url 之类
 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>

代码演示

一个小录像:

NodeJS实现客户端js加密

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

NodeJs 相关文章推荐
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
nodejs和php实现图片访问实时处理
Jan 05 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
nodejs+websocket实时聊天系统改进版
May 18 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
原生nodejs使用websocket代码分享
Apr 07 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
nodejs进阶(6)—连接MySQL数据库示例
Jan 07 #NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 #NodeJs
nodejs和php实现图片访问实时处理
Jan 05 #NodeJs
nodejs实例解析(输出hello world)
Jan 03 #NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 #NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 #NodeJs
浅谈Nodejs中的作用域问题
Dec 26 #NodeJs
You might like
PHP5 的对象赋值机制介绍
2011/08/02 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python中实现php的var_dump函数功能
2015/01/21 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
python中下标和切片的使用方法解析
2019/08/27 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
Python面向对象实现方法总结
2020/08/12 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
学生会竞选自荐信
2013/10/12 职场文书
生日邀请函范文
2014/01/13 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
考勤制度通知
2015/04/25 职场文书
护士旷工检讨书
2015/08/15 职场文书
Python 如何实现文件自动去重
2021/06/02 Python