简介:随着网络的高速发展,网络安全问题也越来越严重。今天说说node中加解密方式的实现,主要包括密码生成、密码加密传输、文本加密三种。目录名词??解释方法实战名词解释的实现下面是对本文涉及的各个加密方法的概念性解释。AES,密码学中的高级加密标准(AES),又称Rijndael加密,是美国联邦政府采用的一种块加密标准。MD5,MessageDigestAlgorithm(英文:MD5Message-DigestAlgorithm),一种广泛使用的密码哈希函数,可以生成一个128位(16-byte)的哈希值(hashvalue),用于保证信息传输的完整性和完整性持续的。MD5由美国密码学家RonaldLinnRivest设计并于1992年公开;Base64,一种最常用的编码方式,用于在互联网上传输8Bit字节码,Base64是一种基于64位的将二进制数据表示为可打印字符的方法。SHA256,安全散列算法SHA系列算法之一,其摘要长??度为256bits,即32字节,故称SHA256。对于任意长度的消息(按位计算),SHA256都会生成一个32字节长度的数据,称为消息摘要。当收到消息时,这个消息摘要可以用来验证数据是否发生了变化,即验证其完整性。感兴趣的可以阅读以下文章了解更多内容:《AES加密算法的详细介绍与实现》《MD5算法详解》《Base64笔记》《一文读懂SHA256算法原理及其实现》实现文本加解密的方法这个主要是使用crypto-js库实现的。按照这个库给出的方法,可以很容易的对信息进行加密和解密。下面直接写个方法吧。目前比较先进的加密算法是AES,下面是使用的算法。安装npminstallcrypto-jsimportfileconstCryptoJS=require('crypto-js');设置iv和密钥constkey=CryptoJS.enc.Utf8.parse('1c0c492f3c95b700');constiv=CryptoJS.enc.Utf8.parse('1160837067ec4700');文本加密//加密函数Encrypto(pwd){letsrcs=CryptoJS.enc.Utf8.parse(pwd);让encrypt=CryptoJS.AES.encrypt(srcs,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});returnencrypto.ciphertext.toString().toUpperCase();}文本解密//解密函数Decrypto(pwd){letencryptHexStr=CryptoJS.enc.Hex.解析(密码);让srcs=CryptoJS.enc.Base64.stringify(encryptHexStr);让decrypto=CryptoJS.AES.decrypt(srcs,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});让decryptoStr=decrypto.toString(CryptoJS.enc.Utf8);returndecryptoStr.toString();}密码加密有时会将用户信息从前端传输到后端,无法明文传输,容易泄露用户信息隐私。所以有必要对传输进行加密。这是一个加盐算法。我用的是sha256(Base64(md5(str)))的方法。这种安装依赖包的方式需要crypto、js-sha256、js-base64等几个依赖包。npminstallcryptojs-sha256js-base64引入依赖包constcrypto=require('crypto');constjsSha=require('js-sha256');const{Base64}=require('js-base64');md5加密constmd5Crypto=(pwd)=>{letmd5=crypto.createHash('md5');md5.更新(密码);返回md5.digest('hex');}sha256加密constshaCrypto=(pwd)=>{returnjsSha.sha256(pwd);}Base64加密constbaseCrypto=(pwd)=>{returnBase64.Base64.encode(pwd);}盐密码函数saltPassword(pwd){returnshaCrypto(baseCrypto(md5Crypto(pwd)));}没有生成随机密码的依赖包,我们手动生成吧。functionGenerator(min,max){//可以生成随机密码的相关数组letnum=["0","1","2","3","4","5","6","7","8","9"];让english=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x",“y”,“z”];让ENGLISH=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];letspecial=["-","_","#"];让config=num.concat(english).concat(ENGLISH).concat(special);//先放一个letarr=[];arr.push(getOne(num));arr.push(getOne(英文));arr.push(getOne(英文));arr.push(getOne(特别));//获取要生成的长度letlen=min+Math.floor(Math.random()*(max-min+1));for(leti=4;i
