您的当前位置:首页正文

NodeJS实现客户端js加密

2023-12-01 来源:帮我找美食网
思路:

服务端渲染业务代码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加密

小编还为您整理了以下内容,可能对您也有帮助:

浅谈如何通过node.js对数据进行MD5加密

md5介绍:MD5是一种常用的哈希算法,主要用于对一些重要数据进行“签名”,当然这些数据可以是任意的。最终得到的“签名”通常都是一个16或32位的十六进制的字符串。

实际工作开发中,是不会有人直接将密码明文直接放到数据库当中的。因为这种做法是非常不安全的,一般都要对其进行MD5加密!比如某用户的密码是“123456“(当然这样的密码也没有安全性可言),经过MD5处理后即为:

“e10adc3949ba59abbe56e057f20f883e”。这样做的好处主要有以下两点:

1、预防网站运营内部人员知道你的密码,而做一些不道德的行为。因为有很多人为了方便将所有的密码都设置成一样的。

2、预防外部的攻击,如果你注册的网站被黑客进行攻击,得到该网站的一些数据,拿到的也是一堆经MD5处理后的字符串。

注意:MD5一般是不能够被反编译的。前提是你的密码不要设置的过于简单。这也是现在为什么越来越多的网站,对用户设置的密码有了越来越高的要求,不仅仅是密码长度要够长,而且密码里还要包括数字,大小字母,以及特殊字符串。

本篇文章将主要针对于在NODE.JS中如何对数据进行MD5加密:

直接在NODE中引入md5依赖包:

下载安装md5依赖包

npm install md5

md5加密实例:

var md5 =require("md5");

//设置加密字符串

var passWord="if(1==1){console.log('i love you')}";

console.log(md5(passWord));//a775657889f1ad6e19178c3cd734392b

当然只是单纯的对数据进行MD5加密也并不安全,最好在数据上加上一点盐料:

var md5 =require("md5");

//设置加密字符串

var passWord="if(1==1){console.log('i love you')}";

//在原来的字符串的基础上加上一些特殊文本,例如“zhangpeiyue.com"

console.log(md5(passWord+"zhangpeiyue.com"));//13c22698f52329433107e75b49330484

nodejs中的MD5加密方式:

第一种:

var crypto=require('crypto');

var md5=crypto.createHash("md5");

md5.update("abcdef");

var str=md5.digest('hex');

var s=str.toUpperCase(); //32位大写

console.log(s);

第二种:

var md5=require("md5")

var str=md5("abcdef")

//str=e80b5017098950fc58aad83c8c14978e 默认32位小写

关于nodejs 怎么实现 crypto des加密

就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国*所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56bits。
非对称式加密:
就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。
加密为系统中经常使用的功能,node自带强大的加密功能Crypto,下面通过简单的例子进行练习。
1、加密模块的引用:
var crypto=require('crypto');
var $=require('underscore');var DEFAULTS = {
encoding: {
input: 'utf8',
output: 'hex'
},
algorithms: ['bf', 'blowfish', 'aes-128-cbc']
};

默认加密算法配置项:
输入数据格式为utf8,输出格式为hex,
算法使用bf,blowfish,aes-128-abc三种加密算法;
2、配置项初始化:
function MixCrypto(options) {
if (typeof options == 'string')
options = { key: options };

options = $.extend({}, DEFAULTS, options);
this.key = options.key;
this.inputEncoding = options.encoding.input;
this.outputEncoding = options.encoding.output;
this.algorithms = options.algorithms;
}

加密算法可以进行配置,通过配置option进行不同加密算法及编码的使用。
3、加密方法代码如下:
MixCrypto.prototype.encrypt = function (plaintext) {
return $.rece(this.algorithms, function (memo, a) {
var cipher = crypto.createCipher(a, this.key);
return cipher.update(memo, this.inputEncoding, this.outputEncoding)
+ cipher.final(this.outputEncoding)
}, plaintext, this);
};

使用crypto进行数据的加密处理。
4、解密方法代码如下:
MixCrypto.prototype.decrypt = function (crypted) {
try {
return $.receRight(this.algorithms, function (memo, a) {
var decipher = crypto.createDecipher(a, this.key);
return decipher.update(memo, this.outputEncoding, this.inputEncoding)
+ decipher.final(this.inputEncoding);
}, crypted, this);
} catch (e) {
return;
}
};

关于nodejs 怎么实现 crypto des加密

就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国*所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56bits。
非对称式加密:
就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。
加密为系统中经常使用的功能,node自带强大的加密功能Crypto,下面通过简单的例子进行练习。
1、加密模块的引用:
var crypto=require('crypto');
var $=require('underscore');var DEFAULTS = {
encoding: {
input: 'utf8',
output: 'hex'
},
algorithms: ['bf', 'blowfish', 'aes-128-cbc']
};

默认加密算法配置项:
输入数据格式为utf8,输出格式为hex,
算法使用bf,blowfish,aes-128-abc三种加密算法;
2、配置项初始化:
function MixCrypto(options) {
if (typeof options == 'string')
options = { key: options };

options = $.extend({}, DEFAULTS, options);
this.key = options.key;
this.inputEncoding = options.encoding.input;
this.outputEncoding = options.encoding.output;
this.algorithms = options.algorithms;
}

加密算法可以进行配置,通过配置option进行不同加密算法及编码的使用。
3、加密方法代码如下:
MixCrypto.prototype.encrypt = function (plaintext) {
return $.rece(this.algorithms, function (memo, a) {
var cipher = crypto.createCipher(a, this.key);
return cipher.update(memo, this.inputEncoding, this.outputEncoding)
+ cipher.final(this.outputEncoding)
}, plaintext, this);
};

使用crypto进行数据的加密处理。
4、解密方法代码如下:
MixCrypto.prototype.decrypt = function (crypted) {
try {
return $.receRight(this.algorithms, function (memo, a) {
var decipher = crypto.createDecipher(a, this.key);
return decipher.update(memo, this.outputEncoding, this.inputEncoding)
+ decipher.final(this.inputEncoding);
}, crypted, this);
} catch (e) {
return;
}
};

nodejs怎么打包加密

使用require('crypto')调用加密模块。
加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。
该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher(编码),decipher(解码),sign(签名)以及verify(验证)等方法的封装。
crypto.createCredentials(details)

nodejs怎么打包加密

使用require('crypto')调用加密模块。
加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。
该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher(编码),decipher(解码),sign(签名)以及verify(验证)等方法的封装。
crypto.createCredentials(details)

关于nodejs 怎么实现 crypto des加密

var crypto = require('crypto');

var key = '12345670';

exports.des = {

  algorithm:{ ecb:'des-ecb',cbc:'des-cbc' },

  encrypt:function(plaintext,iv){

    var key = new Buffer(key);

    var iv = new Buffer(iv ? iv : 0);

    var cipher = crypto.createCipheriv(this.algorithm.ecb, key, iv);

    cipher.setAutoPadding(true) //default true

    var ciph = cipher.update(plaintext, 'utf8', 'base64');

    ciph += cipher.final('base64');

    return ciph;

  },

  decrypt:function(encrypt_text,iv){

    var key = new Buffer(key);

    var iv = new Buffer(iv ? iv : 0);

    var decipher = crypto.createDecipheriv(this.algorithm.ecb, key, iv);

    decipher.setAutoPadding(true);

    var txt = decipher.update(encrypt_text, 'base64', 'utf8');

    txt += decipher.final('utf8');

    return txt;

  }

};

nodejs 有md5withrsa 的加密方法吗

md5

/********hmac-sha1加密***************/
    var content = 'password';//加密的明文;
    var token1='miyue';//加密的密钥;
    var buf = crypto.randomBytes(16);
    token1 = buf.toString('hex');//密钥加密;
        console.log("生成的token(用于加密的密钥):"+token1);
    var SecrectKey=token1;//秘钥;
    var Signture = crypto.createHmac('sha1', SecrectKey);//定义加密方式
    Signture.update(content);
    var miwen=Signture.digest().toString('base64');//生成的密文后将再次作为明文再通过pbkdf2算法迭代加密;
    console.log("加密的结果f:"+miwen);


/**********对应的结果(每次生成的结果都不一样)******************/
生成的token(用于加密的密钥):de7c3dafede518a1ad9c2096ee9b4eff
加密的结果f:PUX7fnOMlqVj+BS9o6RnNgxfffY=
  生成的token(用于加密的密钥):93fee046ebf47412c2d54c1e808218d2
  加密的结果f:/ERkUcrjkwxzgxNM7WczU8RaX5o=

nodejs 有md5withrsa 的加密方法吗

md5

/********hmac-sha1加密***************/
    var content = 'password';//加密的明文;
    var token1='miyue';//加密的密钥;
    var buf = crypto.randomBytes(16);
    token1 = buf.toString('hex');//密钥加密;
        console.log("生成的token(用于加密的密钥):"+token1);
    var SecrectKey=token1;//秘钥;
    var Signture = crypto.createHmac('sha1', SecrectKey);//定义加密方式
    Signture.update(content);
    var miwen=Signture.digest().toString('base64');//生成的密文后将再次作为明文再通过pbkdf2算法迭代加密;
    console.log("加密的结果f:"+miwen);


/**********对应的结果(每次生成的结果都不一样)******************/
生成的token(用于加密的密钥):de7c3dafede518a1ad9c2096ee9b4eff
加密的结果f:PUX7fnOMlqVj+BS9o6RnNgxfffY=
  生成的token(用于加密的密钥):93fee046ebf47412c2d54c1e808218d2
  加密的结果f:/ERkUcrjkwxzgxNM7WczU8RaX5o=

求教nodejs怎么对密码进行加盐的hash加密

以前java项目最近打算用node.js重写,但是加密这里实在没搞定。java中加密是:1024次加盐sha-1加密,
一个例子:salt:47998d63768aa877,密文:bef36ba826b045a7c5e536a2f7131a6c232eee36,明文:yunstudio2013
下面是java代码:
private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
try {
MessageDigest digest = MessageDigest.getInstance(algorithm);
if (salt != null) {
digest.update(salt);
}
byte[] result = digest.digest(input);
for (int i = 1; i < iterations; i++) {
digest.reset();
result = digest.digest(result);
}
return result;
} catch (GeneralSecurityException e) {
throw Exceptions.unchecked(e);
}
}
我在js里面是这么干的,但是结果一直不对,代码如下:
//bef36ba826b045a7c5e536a2f7131a6c232eee36
var hash = crypto.createHmac("sha1", “47998d63768aa877”).update(“yunstudio2013”).digest(“hex”);
for (var i = 1; i < 1024; i++) {
hash = crypto.createHmac("sha1", “47998d63768aa877”).update(hash).digest(“hex”);
console.log(hash);
}

求教nodejs怎么对密码进行加盐的hash加密

以前java项目最近打算用node.js重写,但是加密这里实在没搞定。java中加密是:1024次加盐sha-1加密,
一个例子:salt:47998d63768aa877,密文:bef36ba826b045a7c5e536a2f7131a6c232eee36,明文:yunstudio2013
下面是java代码:
private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
try {
MessageDigest digest = MessageDigest.getInstance(algorithm);
if (salt != null) {
digest.update(salt);
}
byte[] result = digest.digest(input);
for (int i = 1; i < iterations; i++) {
digest.reset();
result = digest.digest(result);
}
return result;
} catch (GeneralSecurityException e) {
throw Exceptions.unchecked(e);
}
}
我在js里面是这么干的,但是结果一直不对,代码如下:
//bef36ba826b045a7c5e536a2f7131a6c232eee36
var hash = crypto.createHmac("sha1", “47998d63768aa877”).update(“yunstudio2013”).digest(“hex”);
for (var i = 1; i < 1024; i++) {
hash = crypto.createHmac("sha1", “47998d63768aa877”).update(hash).digest(“hex”);
console.log(hash);
}

基于HLS流媒体协议视频加密,解决方案(源码分析)

一套简单的基于HLS流媒体协议,使用video.js + NodeJS + FFmpeg等相关技术实现的m3u8+ts+aes128视频加密及播放的解决方案。

  起初是为了将工作中已有的基于Flash的视频播放器替换为不依赖Flash的HTML5视频播放器,主要使用了现有的video.js开源播放器做的定制化开发。当完成视频播放器的制作后,在进一步延伸Web端视频加密的相关内容时,开始了解并逐渐深入的研究了相关视频加密内容。最终通过整理归纳,以及自身的理解,做了这个简单的Demo。目的是为了能够给在视频加密这方面有相同目的的道友提供微薄的帮助,要是能起到抛砖引玉的效果,自然是再好不过了。

  本项目的核心原理其实就是讲解了一个视频源从正常的mp4格式如何变为加密后的m3u8文件+ts文件+key秘钥文件,之后又如何在服务端被*访问,最终能够在客户端正常播放的视频加密、解密并播放的流程。

基于HLS流媒体协议视频加密,解决方案(源码分析)

一套简单的基于HLS流媒体协议,使用video.js + NodeJS + FFmpeg等相关技术实现的m3u8+ts+aes128视频加密及播放的解决方案。

  起初是为了将工作中已有的基于Flash的视频播放器替换为不依赖Flash的HTML5视频播放器,主要使用了现有的video.js开源播放器做的定制化开发。当完成视频播放器的制作后,在进一步延伸Web端视频加密的相关内容时,开始了解并逐渐深入的研究了相关视频加密内容。最终通过整理归纳,以及自身的理解,做了这个简单的Demo。目的是为了能够给在视频加密这方面有相同目的的道友提供微薄的帮助,要是能起到抛砖引玉的效果,自然是再好不过了。

  本项目的核心原理其实就是讲解了一个视频源从正常的mp4格式如何变为加密后的m3u8文件+ts文件+key秘钥文件,之后又如何在服务端被*访问,最终能够在客户端正常播放的视频加密、解密并播放的流程。

nodejs里面怎么实现HMAC-SHA1

1)crypto模块

    crypto.createHmac('sha1', app_secret).update('待加密字串').digest().toString('base64'); //base64  

    crypto.createHmac('sha1', app_secret).update('待加密字串').digest('hex');   //16进制  

        但该模块针对部分数据加密的结果,与其他语言加密的结果会不一致,因此采用第二种方式

    2)crypto-js

    var CryptoJS = require('crypto-js');  

    var str = 'orderId=21140600050549799429&orderStatus=TRADE_SUCCESS&payTime=2014-07-22 11:43:31';  

    var key = 'REzySUKRCPfyfV/jfgwTA==';  

    var sign = CryptoJS.HmacSHA1(str, key).toString();  

    console.log(sign);  

nodejs里面怎么实现HMAC-SHA1

1)crypto模块

    crypto.createHmac('sha1', app_secret).update('待加密字串').digest().toString('base64'); //base64  

    crypto.createHmac('sha1', app_secret).update('待加密字串').digest('hex');   //16进制  

        但该模块针对部分数据加密的结果,与其他语言加密的结果会不一致,因此采用第二种方式

    2)crypto-js

    var CryptoJS = require('crypto-js');  

    var str = 'orderId=21140600050549799429&orderStatus=TRADE_SUCCESS&payTime=2014-07-22 11:43:31';  

    var key = 'REzySUKRCPfyfV/jfgwTA==';  

    var sign = CryptoJS.HmacSHA1(str, key).toString();  

    console.log(sign);  

WebSocket 的实现

长连接:一个链接上可以连续发送多个数据包,在链接期间,如果没有数据包发送,需要双方发链路检查包

TCP/IP:TCP/IP 属于传输层,主要解决网络中的数据传输问题,只管传输数据。但这样对传输的数据没有一个规范的封装、解析等处理。使得传输的数据难以识别,所以才有了应用层协议对数据进行的封装、解析等,如http协议。

HTTP:HTTP协议是应用层协议,用于分装解析传输数据。 从HTTP1.1开始其实就默认开启了长链接,也就是请求头header中可以看到Connection:Keep-alive。但是长连接只是说保持了(服务器可以告诉客户端保持时间Keep-Alive:timeout=20;max=20;)这个TCP通道,并采用服务器和客户端应答模式(Request-Response),不需要再创建一个链接通道,做到一个性能优化。

socket:与HTTP协议不一样,socket不是协议,他是在程序层面上对传输层协议(像TCP/IP)的接口封装。我们知道传输层的协议,是解决数据在网络中传输的问题的,那么socket(套接字)就是传输通道两端的接口。

Websocket:WebSocket是包装成了一个应用层协议作为socket,从而能够让客户端和远程服务端通过web建立全双工通信。

WebSocket API 是HTML5 推出的东西。在客户端我们可以通过HTML5 所提供的API 对websocket 进行创建、发送数据、监听信息、监听报错等功能( HTML5 WebSocket )

我们知道WebSocket 是在Socket的基础上实现的,所以我们要做的是对现有的Socket协议进行升级。

步骤:客户端发送websocket请求-->服务端接受并识别该请求-->对该请求协议进行升级--> 返回给客户端 --> websocket 通道建立 --> 客户端/服务端发送数据

协议升级

在这里需要注意的是头部信息和头部信息中的Sec-Websocket-Accept的值。

该值需要是一个通过base64加密的哈希值(sha1)。 而该加密所用的数据是客户端传过来的sec-websocket-key的值和MAGIC_STRINC内的固定值。 对MAGIC_STRINC的说明

Webscoket 中传输的数据是数据帧(frame)

数据帧有多种类型 主要有:文本型、二进制数据

数据帧结构

每一列代表一个字节,一个字节8位,每一位又代表一个二进制数。

创建数据帧

解数据帧

心跳检查

由于websocket 不进行交互会关闭通道所以,才有了心跳检查。

websocket与和他http的区别

基于node实现websocket协议

使用nodeJS在HTTP上实现WebSocket

如何让我的服务器返回正确的Sec-WebSocket-Accept标头值

学习WebSocket协议—从顶层到底层的实现原理

websocket 协议帧 解析

nodejs实现Websocket的数据接收发送

WebSocket 的实现

长连接:一个链接上可以连续发送多个数据包,在链接期间,如果没有数据包发送,需要双方发链路检查包

TCP/IP:TCP/IP 属于传输层,主要解决网络中的数据传输问题,只管传输数据。但这样对传输的数据没有一个规范的封装、解析等处理。使得传输的数据难以识别,所以才有了应用层协议对数据进行的封装、解析等,如http协议。

HTTP:HTTP协议是应用层协议,用于分装解析传输数据。 从HTTP1.1开始其实就默认开启了长链接,也就是请求头header中可以看到Connection:Keep-alive。但是长连接只是说保持了(服务器可以告诉客户端保持时间Keep-Alive:timeout=20;max=20;)这个TCP通道,并采用服务器和客户端应答模式(Request-Response),不需要再创建一个链接通道,做到一个性能优化。

socket:与HTTP协议不一样,socket不是协议,他是在程序层面上对传输层协议(像TCP/IP)的接口封装。我们知道传输层的协议,是解决数据在网络中传输的问题的,那么socket(套接字)就是传输通道两端的接口。

Websocket:WebSocket是包装成了一个应用层协议作为socket,从而能够让客户端和远程服务端通过web建立全双工通信。

WebSocket API 是HTML5 推出的东西。在客户端我们可以通过HTML5 所提供的API 对websocket 进行创建、发送数据、监听信息、监听报错等功能( HTML5 WebSocket )

我们知道WebSocket 是在Socket的基础上实现的,所以我们要做的是对现有的Socket协议进行升级。

步骤:客户端发送websocket请求-->服务端接受并识别该请求-->对该请求协议进行升级--> 返回给客户端 --> websocket 通道建立 --> 客户端/服务端发送数据

协议升级

在这里需要注意的是头部信息和头部信息中的Sec-Websocket-Accept的值。

该值需要是一个通过base64加密的哈希值(sha1)。 而该加密所用的数据是客户端传过来的sec-websocket-key的值和MAGIC_STRINC内的固定值。 对MAGIC_STRINC的说明

Webscoket 中传输的数据是数据帧(frame)

数据帧有多种类型 主要有:文本型、二进制数据

数据帧结构

每一列代表一个字节,一个字节8位,每一位又代表一个二进制数。

创建数据帧

解数据帧

心跳检查

由于websocket 不进行交互会关闭通道所以,才有了心跳检查。

websocket与和他http的区别

基于node实现websocket协议

使用nodeJS在HTTP上实现WebSocket

如何让我的服务器返回正确的Sec-WebSocket-Accept标头值

学习WebSocket协议—从顶层到底层的实现原理

websocket 协议帧 解析

nodejs实现Websocket的数据接收发送

NodeJS中使用token

什么是Token?
Token指访问资源的凭据,是一种身份认证的方式,它是解决跨域认证的最流行的一种方式。

为什么用Token?
以前较为流行的是通过session去做身份认证,session是通过服务器中保存会话数据来做身份认证,这种方式会导致在高并发中服务器压力过大的情况,还有就是,如果是服务器集群,那么就需要这些服务器session共享。
Token不在服务器中保存会话数据,而是保存在客户端。每次请求的headers中存入Token,在服务器中判断Token的有效性,是否可以访问资源。

传统Token和JWT的区别

内部包含有签名算法、Token类型,然后通过base64url算法转成字符串

内部包含JWT标准数据和自定义数据,然后通过base64url算法转成字符串
JWT标准数据常见的有:

可选择性使用以上标准数据

注意:由于JWT是默认不加密的,所以在这边不要存敏感信息

这部分是对前两部分的签名,防止数据的篡改。
secret是服务器端保存的密钥,只有服务器端知道,再使用header中所指定的签名算法对上面的俩部分进行签名,按照以下公式生成签名。

算出签名之后,把三部分通过.分隔开返回给用户就行了
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTAsIm5hbWUiOiLlvKDkuIkiLCJhZ2UiOjE2LCJpYXQiOjE1ODgxMzkzMjMsImV4cCI6MTU4ODEzOTMzM30.WzZp_aNgiw4iTsX7buxMhZe0z0e94Ve6ImEZ8L8L78c

每次客户端的请求都需要带上这个token,一般是把token写入到请求的headers中

通过npm包jsonwebtoken来完成token的生成和验证

NodeJS中使用token

什么是Token?
Token指访问资源的凭据,是一种身份认证的方式,它是解决跨域认证的最流行的一种方式。

为什么用Token?
以前较为流行的是通过session去做身份认证,session是通过服务器中保存会话数据来做身份认证,这种方式会导致在高并发中服务器压力过大的情况,还有就是,如果是服务器集群,那么就需要这些服务器session共享。
Token不在服务器中保存会话数据,而是保存在客户端。每次请求的headers中存入Token,在服务器中判断Token的有效性,是否可以访问资源。

传统Token和JWT的区别

内部包含有签名算法、Token类型,然后通过base64url算法转成字符串

内部包含JWT标准数据和自定义数据,然后通过base64url算法转成字符串
JWT标准数据常见的有:

可选择性使用以上标准数据

注意:由于JWT是默认不加密的,所以在这边不要存敏感信息

这部分是对前两部分的签名,防止数据的篡改。
secret是服务器端保存的密钥,只有服务器端知道,再使用header中所指定的签名算法对上面的俩部分进行签名,按照以下公式生成签名。

算出签名之后,把三部分通过.分隔开返回给用户就行了
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTAsIm5hbWUiOiLlvKDkuIkiLCJhZ2UiOjE2LCJpYXQiOjE1ODgxMzkzMjMsImV4cCI6MTU4ODEzOTMzM30.WzZp_aNgiw4iTsX7buxMhZe0z0e94Ve6ImEZ8L8L78c

每次客户端的请求都需要带上这个token,一般是把token写入到请求的headers中

通过npm包jsonwebtoken来完成token的生成和验证

帮我找美食网还为您提供以下相关内容希望对您有帮助:

浅谈如何通过node.js对数据进行MD5加密

本篇文章将主要针对于在NODE.JS中如何对数据进行MD5加密:直接在NODE中引入md5依赖包:下载安装md5依赖包npm install md5md5加密实例:var md5 =require("md5");//设置加密字符串var passWord="if(1==1){console.log('...

Nodejs 使用node-rsa 加密数据

1、在node.js中使用rsa算法。首先需要是使用node-rsa包 2、实现加密/解密 客户端需要使用一个jsencrypt.min.js 包利用公钥对数据进行加密 以上运行时可以会出现如下错误 出现如上错误的时候,是服务端的加密方法和jsencrypt的...

关于nodejs 怎么实现 crypto des加密

1、加密模块的引用:var crypto=require('crypto');var $=require('underscore');var DEFAULTS = { encoding: { input: 'utf8',output: 'hex'},algorithms: ['bf', 'blowfish', 'aes-128-cbc']};默认加密算法配...

nodejs怎么打包加密

加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher(编码),decipher(解码),sign(签...

关于nodejs 怎么实现 crypto des加密

var crypto = require('crypto');var key = '12345670';exports.des = { algorithm:{ ecb:'des-ecb',cbc:'des-cbc' }, encrypt:function(plaintext,iv){ var key = new Buffer(key); var iv = new...

nodejs 有md5withrsa 的加密方法吗

//密钥加密; console.log("生成的token(用于加密的密钥):"+token1); var SecrectKey=token1;//秘钥; var Signture = crypto.createHmac('sha1', SecrectKey);//定义加密方式 Signture.update(content...

关于腾讯云短信接口的sig字段,sha256加密问题,nodejs

'utf-8').digest('hex'); return sig;}console.log(sig());输出结果如下:7b1e97051886abdbd66c684530db2ba01644f828f31e06d624d88aff5469faa0原因就是文档里面强调了编码要使用 utf-8,而 js 默认编码不是...

NodeJS(Express框架)实现 Token 验证免密登录 (一)

把尽可能多的信息存储在客户端而不是服务端。使用 Token 可以防御 CSRF 攻击,之前写过一篇关于网络安全的文章,感兴趣的朋友可以看一下 「XSS 攻击、CSRF 攻击、SQL 注入、流量劫持(DNS 劫持、HTTP 劫持)—— 浏览器...

nodejs里面怎么实现HMAC-SHA1

crypto.createHmac('sha1', app_secret).update('待加密字串').digest('hex'); //16进制 但该模块针对部分数据加密的结果,与其他语言加密的结果会不一致,因此采用第二种方式2)crypto-js var CryptoJS = require...

求教nodejs怎么对密码进行加盐的hash加密

以前java项目最近打算用node.js重写,但是加密这里实在没搞定。java中加密是:1024次加盐sha-1加密,一个例子:salt:47998d63768aa877,密文:bef36ba826b045a7c5e536a2f7131a6c232eee36,明文:yunstudio2013 下面是java...

Top