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 22 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
原生nodejs使用websocket代码分享
Apr 07 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
python中enumerate的用法实例解析
2014/08/18 Python
Python理解递归的方法总结
2019/01/28 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
python3 re返回形式总结
2020/11/20 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
国外的一些J2EE面试题一
2012/10/13 面试题
入党自我鉴定范文
2013/10/04 职场文书
护士自我鉴定总结
2014/03/24 职场文书
小学三年级作文之写景
2019/11/05 职场文书