小程序AES加密、解密

小程序AES加密、解密,第1张

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

}

序言:介绍一下javascript下AES加密和解密,运用的工作模式为ECB(电码本模式Electronic Codebook Book),填充方式为(NoPadding),及CBC(密码分组链接模式Cipher Block Chaining)。这里用到的是CryptoJS。

wxapkg是一个二进制文件,有其自己的一套结构。

wxapkg是微信小程序编译包格式,文件内包含小程序的源码与图像等资源文件。但是这里有个坑,想要进入到上面这个目录的话,用手机自带的文件管理器肯定是不行的,安卓或者iPhone都要要用到第三方的文件管理器,比如:RE文件管理器,并且安卓需要取得root权限。

wxapkg文件的数据格式分成三个部分:

第一部分,文件的前6字节为V1MMWX;第二部分,之后的1024字节为AES CBC加密数据;第三部分,从1024+6之后的所有数据为异或加密的数据。

用UE等十六进制编辑器打开一个wxapkg,会很容易看到三个部分的界限。

文件第二部分的AES CBC加密,使用的key与对应的微信小程序id有关。文件第三部分的异或加密,真就是简单的异或,xorkey为微信小程序id的倒数第二字节的内容。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12100933.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存