小程序AES加密、解密

npm install  crypto-js

import CryptoJS from 'crypto-js'

// 定义加/解密的 key

const initKey = 'Test-AES-CBC-128';

// 设置数据块长度

const keySize = 128;

//设置向量和服务端保持一致

const iv = "0abcdefghij7twhjm";

export const aesEncrypt = (data, key) => {

  /**

  * CipherOption, 加密的一些选项:

  * mode: 加密模式, 可取值(CBC, CFB, CTR, CTRGladman, OFB, ECB), 都在 CryptoJS.mode 对象下

  * padding: 填充方式, 可取值(Pkcs7, AnsiX923, Iso10126, Iso97971, ZeroPadding, NoPadding), 都在 CryptoJS.pad 对象下

  * iv: 偏移量, mode === ECB 时, 不需要 iv

  * 返回的是一个加密对象

  */

  const cipher = CryptoJS.AES.encrypt(data, key, {

    mode: CryptoJS.mode.CBC,

    padding: CryptoJS.pad.Pkcs7,

    iv: CryptoJS.enc.Utf8.parse(iv)

  });

// 将加密后的数据转换成 Base64

  const base64Cipher = cipher.ciphertext.toString(CryptoJS.enc.Base64); //CryptoJS.enc.Base64

  console.log('base64Cipher', base64Cipher)

// 处理 Android 某些低版的BUG

//    const resultCipher = base64Cipher.replace('//+/g,\'-\'').replace(g,'_');

// 返回加密后的经过处理的 Base64

  return base64Cipher;

}



/**

* 解密函数

* @param {string} encrypted - 加密的数据;

* @param {string} key - 加密使用的 key

*/

export const aesDecrypt = (encrypted, key) => {

// 先将 Base64 还原一下, 因为加密的时候做了一些字符的替换

//      const restoreBase64 = encrypted.replace().replace(/_/g,'/');

// 这里 mode, padding, iv 一定要跟加密的时候完全一样

// 返回的是一个解密后的对象

  const decipher = CryptoJS.AES.decrypt(encrypted, key, {

    mode: CryptoJS.mode.CBC,

    padding: CryptoJS.pad.Pkcs7,

    iv: CryptoJS.enc.Utf8.parse(iv)

  });

// 将解密对象转换成 UTF8 的字符串

  const resultDecipher = CryptoJS.enc.Utf8.stringify(decipher);

// 返回解密结果

  return resultDecipher;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容