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实现获取某宝商品分类
May 28 NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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中数据的批量导入(csv文件)
2006/10/09 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
JavaScript 参考教程
2006/12/29 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
python实现telnet客户端的方法
2015/04/15 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
python 实现删除文件或文件夹实例详解
2016/12/04 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
python实现可变变量名方法详解
2019/07/01 Python
使用python模拟命令行终端的示例
2019/08/13 Python
keras实现多种分类网络的方式
2020/06/11 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
一套Delphi的笔试题二
2013/05/11 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
公司承诺书范文
2014/05/19 职场文书
入党心得体会
2019/06/20 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis