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读取memcache示例分享
Jan 02 NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
Jul 26 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
nodejs更改项目端口号的方法
May 13 NodeJs
NodeJS 中Stream 的基本使用
Jul 30 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
nodejs利用readline提示输入内容实例代码
Jul 15 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
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
angularjs学习笔记之简单介绍
2015/09/26 Javascript
详解javascript遍历方式
2015/11/11 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
初探nodeJS
2017/01/24 NodeJs
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
python encode和decode的妙用
2009/09/02 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
python在地图上画比例的实例详解
2020/11/13 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
商学院大学生求职的自我评价
2014/03/12 职场文书
干部考核评语
2014/04/29 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2014年销售员工作总结
2014/12/01 职场文书
红旗渠导游词
2015/02/09 职场文书
郭明义观后感
2015/06/08 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis