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中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
Nodejs初级阶段之express
Nov 23 NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
学习 NodeJS 第八天:Socket 通讯实例
Dec 21 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 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
PHP日期处理函数 整型日期格式
2011/01/12 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
python实现批量监控网站
2016/09/09 Python
Python随机数random模块使用指南
2016/09/09 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
Python subprocess模块常见用法分析
2018/06/12 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
物流专业大学应届生求职信
2013/11/03 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
单位委托书
2014/10/15 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
用Python将库打包发布到pypi
2021/04/13 Python
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers