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异步编程
Dec 04 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
nodeJS微信分享
Dec 20 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
nodejs中express入门和基础知识点学习
Sep 13 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 NodeJs
详解nodejs内置模块
May 06 NodeJs
详解NodeJS模块化
Jun 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
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
改变隐藏的input中value的值代码
2013/12/30 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
python遍历类中所有成员的方法
2015/03/18 Python
python使用super()出现错误解决办法
2017/08/14 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
python实现文字版扫雷
2020/04/24 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
安全员岗位职责
2013/11/11 职场文书
学校司机岗位职责
2013/11/14 职场文书
大学感恩节活动总结
2015/05/05 职场文书
学校教学工作总结2015
2015/05/19 职场文书
公开致歉信
2019/06/24 职场文书
详解java如何集成swagger组件
2021/06/21 Java/Android
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers
Redis特殊数据类型bitmap位图
2022/06/01 Redis