Node.js 内置模块crypto加密模块(2) AES

时间:2021-12-01 18:29:26

AES:高级加密标准 ( Advanced Encryption Standard )

AES是一种对称加密算法:加密需要密钥,且加密密钥和解密密钥相同

下面是AES加密的Node实现:


"
use strict"; const crypto = require("crypto"); //封装使用AES加密的方法 function aesEncrept(data, key){
  
//实例化一个cipher加密对象,使用aes192进行加密,key作为密钥   const cipher = crypto.createCipher("aes192",key);
  
//使用cipher对data进行加密,源数据类型为utf-8,输出数据类型为hex   let crypted = cipher.update(data, "utf-8", "hex");   crypted += cipher.final("hex");
  
return crypted; } //封装对应的AES解密方法 function aesDecrept(encrepted, key) {
  
//实例化一个decipher解密对象,使用aes192进行解密,key作为密钥   const decipher = crypto.createDecipher("aes192", key);
  
//使用decipher对encrepted进行解密,源数据类型为hex,输出数据类型为utf-8   let decrypted = decipher.update(encrepted, "hex", "utf-8");   decrypted += decipher.final("utf-8");
  
return decrypted; } //需要加密的数据 let data = "This is what needs to be encrepted";

//AES加密的密钥 let keyword
= "This is the key";

//使用自定义的aesEncrept方法进行加密 let encrepted
= aesEncrept(data, keyword);

//使用自定义的aesDecrept方法对加密数据进行解密 let decrepted
= aesDecrept(encrepted, keyword); console.log( "原始数据:" + data ); console.log( "经AES加密后:" + encrepted ); console.log( "经相应的解密后:" + decrepted );

 

注:

1.update方法只能对源数据的前16位进行加密,对加密数据的前32位进行解密;

2.final方法就是解决上面的缺陷,可以对剩余的数据进行加密/解密;

所以才有了下面的这个写法:

  let decrypted = decipher.update(encrepted, "hex", "utf8");
  decrypted += decipher.final("utf-8");

目的就是为了对全部的数据进行加密/解密

3.AES加密算法除了aes192外,还有aes-128-ecbaes-256-cbc

 

 

拓展阅读:AES加密算法的详细介绍与实现

        来源:CSDN

        作者:TimeShatter