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教程之制作一个简单的文章发布系统
Nov 21 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
nodejs基础应用
Feb 03 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
解析NodeJS异步I/O的实现
Apr 13 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
nodejs+express搭建多人聊天室步骤
Feb 12 NodeJs
Mac下通过brew安装指定版本的nodejs教程
May 17 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 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
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
document.compatMode介绍
2009/05/21 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
jQuery的框架介绍
2016/05/11 Javascript
js控制div层的叠加简单方法
2016/10/15 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Python实现视频下载功能
2017/03/14 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
Python Process多进程实现过程
2019/10/22 Python
Python Lambda函数使用总结详解
2019/12/11 Python
python判断变量是否为列表的方法
2020/09/17 Python
学习三严三实心得体会
2014/10/13 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
PYTHON InceptionV3模型的复现详解
2022/05/06 Python