之前使用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
节语
感觉文档写的有点不太详细,还是要各种查资料,要是能有一个真实的例子就能省掉大部分时间了。