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 sublime text 3安装与配置
Jun 19 NodeJs
初始Nodejs
Nov 08 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 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
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
php中上传文件的的解决方案
2018/09/25 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
python利用正则表达式提取字符串
2016/12/08 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
雪山饭庄的创业计划书范文
2014/01/18 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
信用卡工作证明模板
2014/09/14 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
喋血孤城观后感
2015/06/08 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
学校运动会开幕词
2016/03/03 职场文书