AES对称加密

AES(Advanced Encryption Standard)高级加密标准,是一种最常见的对称加密算法(微信小程序加密传输就是用这个加密算法), 对称加密算法即加密和解密用相同的密钥

AES加解密流程:

  • 密钥

用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。

对称加密算法与非对称加密算法的区别

  • 对称加密算法

加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦

  • 非对称加密算法

加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal。实际中,一般是通过RSA加密AES的密钥,传输到接收方,接收方解密得到AES密钥,然后发送方和接收方用AES密钥来通信

像https就是用非对称密钥协商出对称密钥,再用对称密钥来加密业务数据

如:
利用node.js或者webpack plugin 在打包时,进行js文件内容的加密打包处理

在https环境下,Android和ios的app 一般会对敏感信息进行AES加密。

  • 防止文件被篡改
  • 防止简单的抓包、爬虫等
  • 增加窃取信息成本 (窃取成本 > 价值)
  • 劫持泛滥,有必要再次加密关键数据

前端打包过程

  • webpack编译js
  • 生成文件名(Md5)
  • js 文件进行AES加密
  • 生成跳转配置文件
  • 压缩生成zip包

移动端执行逻辑

  • 下载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基本原理,也是用非对称密钥协商出对称密钥,再用对称密钥来加密业务数据

源作者:昭光
链接:https://juejin.cn/post/6901923757594509325

推荐阅读更多精彩内容