nodejs的加密方式

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.编码实现:

  1. 安装crypto-js模块

    npm install crypto-js

  2. 在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;
    

    nodejs的加密方式_第1张图片

三、非对称加密

​ 有两把钥匙,公钥和私钥。

​ 公钥:对外公开,发送方用接收方对外公开的钥匙进行加密

​ 私钥:不公开的,接收方在收到数据后,用私钥解密

安全性优于对称加密,在对称加密中当一方的密钥被泄露后,密文就存在被破解和篡改的可能,但在非对称加密中,公钥本身就对外开放,只需保护私钥即可。

四、摘要算法

将任意长度的输入根据算法生成一串固定长度的伪随机数。

1.特点

  • 不需要密钥,加密出来的数据无法被解密,具有不可逆性
  • 生成的摘要长度是固定的,与输入无关
  • 相同的输入,使用相同的实现,生成的摘要相同;不同的输入,生成的摘要类似,即不会发生碰撞

2.编码实现

  1. 安装crypto模块

    npm install crypto

  2. 实现

    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'))
    

在这里插入图片描述

你可能感兴趣的:(加密解密,nodejs,前端)