最近遇到的几个网站都是以密文形式提交密码,也就是说在网络上传输的密码都是密文,提高了密码传输在网络中的安全性。后端语言加解密已经有非常成熟的解决方案。对于前端,谷歌之前发布了一个crypto-js,提供了浏览器js的加解密方案。今天我们就来看看基于AES的前后端加解密过程。javascriptinstallnpmpackagenpminstallcrypto-js加密代码constCryptoJS=require("crypto-js");constkey=CryptoJS.enc.Latin1.parse('1234567812345678');constiv=CryptoJS.enc.Latin1.parse('1234567812345678');constencoded=CryptoJS.AES.encrypt('hahaha',key,{iv:iv,mode:CryptoJS.mode.CBC,添加:CryptoJS.pad.ZeroPadding}).toString()console.log('encoded',encoded)解密代码constkey=CryptoJS.enc.Latin1.parse('123456781234567812345678');constiv=CryptoJS.enc.Latin1.parse('1234567812345678');constdecoded=CryptoJS.AES.decrypt(encoded,key,{iv:iv,mode:CryptoJS.mode.CBC,adding:CryptoJS.pad.ZeroPadding}).toString(CryptoJS.enc.Utf8)console.log('解码',解码);输出如下encoded6bcgYd4f4ZgNOQH/3tqMpg==decodedhaha??haPHP可以直接使用openssl解密,代码如下:$encoded='6bcgYd4f4ZgNOQH/3tqMpg==';$key='123456781234567812345678';$iv='1234567812345678';var_dump(openssl_decrypt,'192-CBC',$key,0,$iv));输出结果:string(6)"hahaha"注意AES加密数字与密钥key相关off,下面是密钥数字和加密的对应关系16=>AES-12824=>AES-19232=>AES-256iv是初始化向量。多于16字节或少于16字节将补16字节或截断为16字节由于AES是块加密,铭文被分成固定长度的块(通常长度为16字节),所以iv也是16字节。CBC是加密模式
