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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
Mar 18 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
详解nodejs express下使用redis管理session
Apr 24 NodeJs
nodejs body-parser 解析post数据实例
Jul 26 NodeJs
nodejs动态创建二维码的方法
Aug 12 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
NodeJS安装图文教程
Apr 19 NodeJs
nodejs实现UDP组播示例方法
Nov 04 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
drupal 代码实现URL重写
2011/05/04 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
php实现微信支付之现金红包
2018/05/30 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
用于table内容排序
2006/07/21 Javascript
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
用Python开发app后端有优势吗
2020/06/29 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
旅游个人求职信范文
2014/01/30 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
法制宣传月活动方案
2014/05/11 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
技术员个人工作总结
2015/03/03 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android