AES(Advanced Encryption Standard)高級加密標準,是一種最常見的對稱加密算法(微信小程序加密傳輸就是用這個加密算法), 對稱加密算法即加密和解密用相同的密鑰
AES加解密流程:
- 密鑰
用來加密明文的密碼洛波,在對稱加密算法中,加密與解密的密鑰是相同的。密鑰為接收方與發(fā)送方協(xié)商產(chǎn)生盐捷,但不可以直接在網(wǎng)絡(luò)上傳輸,否則會導(dǎo)致密鑰泄漏默勾,通常是通過非對稱加密算法加密密鑰碉渡,然后再通過網(wǎng)絡(luò)傳輸給對方,或者直接面對面商量密鑰母剥。密鑰是絕對不可以泄漏的滞诺,否則會被攻擊者還原密文,竊取機密數(shù)據(jù)环疼。
對稱加密算法與非對稱加密算法的區(qū)別
- 對稱加密算法
加密和解密用到的密鑰是相同的习霹,這種加密方式加密速度非常快炫隶,適合經(jīng)常發(fā)送數(shù)據(jù)的場合淋叶。缺點是密鑰的傳輸比較麻煩
- 非對稱加密算法
加密和解密用的密鑰是不同的,這種加密方式是用數(shù)學上的難解問題構(gòu)造的伪阶,通常加密解密的速度比較慢煞檩,適合偶爾發(fā)送數(shù)據(jù)的場合。優(yōu)點是密鑰傳輸方便栅贴。常見的非對稱加密算法為RSA斟湃、ECC和EIGamal。實際中檐薯,一般是通過RSA加密AES的密鑰凝赛,傳輸?shù)浇邮辗剑邮辗浇饷艿玫紸ES密鑰,然后發(fā)送方和接收方用AES密鑰來通信
像https就是用非對稱密鑰協(xié)商出對稱密鑰墓猎,再用對稱密鑰來加密業(yè)務(wù)數(shù)據(jù)
如:
利用node.js或者webpack plugin 在打包時捆昏,進行js文件內(nèi)容的加密打包處理
在https環(huán)境下,Android和ios的app 一般會對敏感信息進行AES加密陶衅。
- 防止文件被篡改
- 防止簡單的抓包屡立、爬蟲等
- 增加竊取信息成本 (竊取成本 > 價值)
- 劫持泛濫,有必要再次加密關(guān)鍵數(shù)據(jù)
前端打包過程
- webpack編譯js
- 生成文件名(Md5)
- js 文件進行AES加密
- 生成跳轉(zhuǎn)配置文件
- 壓縮生成zip包
移動端執(zhí)行邏輯
- 下載zip包并解壓縮zip文件
- 獲取weex文件名
- weex 控制器加載文件
const crypto = require("crypto");
const CryptoJs = require('crypto-js')
// 哈希算法
const hash = crypto.createHash("md5");
// hmac算法
const hmac = crypto.createHmac("sha256", "key");
hmac.update("hello world");
console.log(hmac.digest("hex"));
hash.update("hello world");
console.log(hash.digest("hex"));
// AES對稱加密算法
// encrypt
let cipherText = CryptoJs.AES.encrypt('hello world', 'key123').toString()
console.log(cipherText)
console.log('-----加密串-----')
const bytes = CryptoJs.AES.decrypt(cipherText, 'key123')
const originalText = bytes.toString(CryptoJs.enc.Utf8)
console.log(originalText)
console.log('------解密串-----')
PS:
在前端常見的加密方式中AES很少使用搀军,因為相對于非對稱的RSA安全性很低膨俐,AES是典型的對稱加密,密鑰就在前端源碼里(注意在信息保護中罩句,完整性遠遠比機密性更重要焚刺。如果得到的信息是篡改、重放的门烂,那你機密性沒有多大用處)
https基本原理乳愉,也是用非對稱密鑰協(xié)商出對稱密鑰,再用對稱密鑰來加密業(yè)務(wù)數(shù)據(jù)