鸿蒙 Crypto 库 AES 加密

714 阅读2分钟

之前使用crypto的md5加密,使用起来感觉还是挺好用的,但是在使用aes加密的时候却遇到了点问题,传入参数跟加密的结果还真有点头大,按照参考文档来看还没有详细的调用例子,经过多方对比尝试终于解决了,特此记录一下。

安装

安装三方库,地址 https://gitee.com/openharmony-sig/crypto-js

ohpm  install @ohos/crypto-js 

加密

以下以 aes cbc 加密方式举例:感觉一个比较好看好用的验证地址 devglan.com/online-tool…

key: 0ada0f8609947992 iv: 0ada0f8609947992 字符串:heihei

使用crypto库首先需要把key跟iv解析一下,然后在进行加密

let keyParse = CryptoJS.enc.Utf8.parse(key)
let ivParse = CryptoJS.enc.Utf8.parse(iv)

// base64形式的加密结果
let aesBase64 = CryptoJS.AES.encrypt(info, keyParse, {
  iv: ivParse,
}).toString()
// GFFC7wEfHgO0UzaDKVnZaw==

// hex形式的加密结果
let aesHex = CryptoJS.AES.encrypt(info, keyParse, {
  iv: ivParse,
}).ciphertext.toString()
// 185142EF011F1E03B45336832959D96B

解密

如果获取到的解密数据是hex形式的,需要先整理一下到base64,然后在进行解密

// 如果是hex格式的数据需要先整理成base64
encrypted = '185142EF011F1E03B45336832959D96B'
encrypted = (encrypted + '').replace(/\n*$/g, '').replace(/\n/g, '')
let hex = CryptoJS.enc.Hex.parse(encrypted)
let base64 = CryptoJS.enc.Base64.stringify(hex)

let keyParse = CryptoJS.enc.Utf8.parse(key)
let ivParse = CryptoJS.enc.Utf8.parse(iv)

let str = CryptoJS.AES.decrypt(base64, keyParse, {
  iv: ivParse,
})
// 最终得到结果res
let res = CryptoJS.enc.Utf8.stringify(str)
// heihei

附加

另外在 CryptoJS.AES.encrypt 及 CryptoJS.AES.decrypt 两个里边还能加入一下其他的特殊配制,譬如说指定加密模式及补齐方式。 例如:

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase", {
  mode: CryptoJS.mode.CFB,
  padding: CryptoJS.pad.AnsiX923
});

支持的mode如下

  • CBC (the default)
  • CFB
  • CTR
  • OFB
  • ECB

支持的padding如下

  • Pkcs7 (the default)
  • Iso97971
  • AnsiX923
  • Iso10126
  • ZeroPadding
  • NoPadding

节语

感觉文档写的有点不太详细,还是要各种查资料,要是能有一个真实的例子就能省掉大部分时间了。