nodejs的加密方式
一、加密算法
为了保证数据的安全性和防篡改,很多数据在传输中都进行了加密
加密可分为三大类:对称加密、非对称加密、摘要算法
二、对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时作用信息的加密和解密。该方法称为对称加密,也称为单密钥加密。
主流有AES、DES,AES 是新一代的标准,速度快,安全级别更高。
1.AES:
共有五种加密方式:ECB、CBC、CTR、OCF、CFB
区别:ECB的只用一个密钥即可,比较简单,利于计算,其他的除了一个密钥之外还需要一个向量,其作用是数据的加密,安全性优于ECB
长度 | 密钥长度 | 向量长度 |
128位(16字节) | 16 | 16 |
192位(24字节) | 24 | 16 |
256位(32字节) | 32 | 16 |
2.DES:
加密默认与AES相同,但其密钥的长度只有8字节,向量长度也是8字节
3.编码实现:
- 安装crypto-js模块
npm install crypto-js
- 在js文件中引入
var express = require('express');
var router = express.Router();
var pool = require('../config/tets')
var CryptoJS = require('crypto-js')
/* 加密
key :密钥
text :明文
*/
function encrypt(key,text) {
return CryptoJS.AES.encrypt(text,key).toString()
}
/* 解密
key :密钥
cipherText :密文
*/
function decrypt(key,cipherText){
let bytes = CryptoJS.AES.decrypt(cipherText,key)
return bytes.toString(CryptoJS.enc.Utf8)
}
// http://localhost:8857/wechat/login
router.post('/login',function(req,res,next){
pool.getConnection(function(err,conn){
if(err){
console.log('连接失败')
} else{
let user = req.body.username
let pass = req.body.password
let ciphertext = encrypt(user,pass)
let originaltext = decrypt(user,ciphertext)
let data = [user,originaltext]
console.log(ciphertext)
console.log(originaltext)
console.log(data)
let sql = 'select * from admin where username = ? and password =?'
conn.query(sql,data,function(error,results){
if(error){
console.log('查询失败')
return
}
res.send(results)
})
conn.release()
}
})
})
module.exports = router;
三、非对称加密
有两把钥匙,公钥和私钥。
公钥:对外公开,发送方用接收方对外公开的钥匙进行加密
私钥:不公开的,接收方在收到数据后,用私钥解密
安全性优于对称加密,在对称加密中当一方的密钥被泄露后,密文就存在被破解和篡改的可能,但在非对称加密中,公钥本身就对外开放,只需保护私钥即可。
四、摘要算法
将任意长度的输入根据算法生成一串固定长度的伪随机数。
1.特点
- 不需要密钥,加密出来的数据无法被解密,具有不可逆性
- 生成的摘要长度是固定的,与输入无关
- 相同的输入,使用相同的实现,生成的摘要相同;不同的输入,生成的摘要类似,即不会发生碰撞
2.编码实现
- 安装crypto模块
npm install crypto
- 实现
var crypto = require("crypto")
/*
加密
text :明文
*/
function md5(text){
var hash = crypto.createHash('md5')
return hash.update(text).digest('hex')
}
/**
* data
*/
function sha256(data){
var hash = crypto.createHash('sha256');
return hash.update(data).digest('hex');
}
console.log(md5('123'))
console.log(sha256('123'))