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修复ipa处理过的png图片
Feb 17 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
nodejs微信开发之授权登录+获取用户信息
Mar 17 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 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
VOLVO车载收音机
2021/03/02 无线电
关于文本留言本的分页代码
2006/10/09 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
解析php常用image图像函数集
2013/06/24 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
php中关于换行的实例写法
2019/09/26 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
标准毕业生自荐信范文
2013/11/04 职场文书
求职简历的自我评价
2014/01/31 职场文书
中等生评语大全
2014/05/04 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
2014年教育工作总结
2014/11/26 职场文书
祝寿主持词
2015/07/02 职场文书
创业计划书之溜冰场
2019/10/25 职场文书