【React Native】AES+Base64加密
在移動端App開發中, AES
加密非常常用,本文主要講解如何在 React Native
中封裝自己的 AES
加密工具類及會遇到的坑。這裏的 AES
加密是基於前端常用的加密庫
crypto-js
。
安裝crypto-js
使用 NPM
或者 Yarn
安裝 crypto-js
# NPM npm install crypto-js # Yarn yarn add crypto-js
注意:使用 crypto-js
4.0.0
及以上的版本會報找不到Crypto.js的錯,這可能是新版本的Bug,需要在 package.json
中找到 crypto-js
並把版本號指定爲 ^3.3.0
(與3.3.0版本兼容,相當於3.X.X, 即>=3.3.0 < 4.0.0,不改變大版本號),然後重新執行 npm install
:
"crypto-js": "^3.3.0", //
創建加密工具類
新建 AESTool.js
文件,添加如下代碼:
import CryptoJS from 'crypto-js' const key = CryptoJS.enc.Utf8.parse('abcdef0123456789'); const iv = CryptoJS.enc.Utf8.parse("0123456789abcdef"); export const AESTool = { encrypt: (message) => { let sendData = CryptoJS.enc.Utf8.parse(message); let encrypted =CryptoJS.AES.encrypt(sendData,key,{ iv: iv, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.Pkcs7 }); return encrypted.toString(); //Base64字符串 }, decrypt: (message) => { let decrypt = CryptoJS.AES.decrypt(message, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return decrypt.toString(CryptoJS.enc.Utf8); } }
這裏使用的是 CBC
加密模式,使用了 Pkcs7
補碼方式。需要注意的是加密方法裏傳的明文、偏移量、密鑰等參數都需要使用 CryptoJS.enc.Utf8.parse()
方法解析之後使用。
注意:這裏 CryptoJS
加密後的字符串就是 Base64
編碼的,不需要重複進行Base64編碼。解密的時候也直接傳 Base64
字符串即可。