HarmonyOS AES加解密(CBC模式)
项目中经常用到加解密,翻了官方文档以及其他优秀博主的博客,简单实现一下,话不多说,直接上代码。
import util from '@ohos.util';
import cryptoFramework from '@ohos.security.cryptoFramework';
export class AESUtils {
//content为加密内容,password为密钥
static async encrypt(content: string, password: string): Promise<string> {
try {
//0.base64
let that = new util.Base64Helper();
//1.创建密钥生成器
let generator = cryptoFramework.createSymKeyGenerator('AES128')
//2.使用密钥生成器将密钥转换成 cryptoFramework.SymKey
let key = await generator.convertKey({ data: this.stringToUint8Array(password) })
//3.创建cipher
let aesCipher = cryptoFramework.createCipher('AES128|CBC|PKCS5')
//4.init cipher
await aesCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, null)
//5.aes 加密
let encryptText = await aesCipher.doFinal({ data: this.stringToUint8Array(content) })
return that.encodeToStringSync(encryptText.data)
} catch (error) {
return ''
}
}
//content为加密内容,password为密钥
static async decrypt(content: string, password: string): Promise<string> {
try {
//0.base64
let that = new util.Base64Helper();
//1.创建密钥生成器
let generator = cryptoFramework.createSymKeyGenerator('AES128')
//2.使用密钥生成器将密钥转换成 cryptoFramework.SymKey
let key = await generator.convertKey({ data: this.stringToUint8Array(password) })
//3.创建cipher
let aesCipher = cryptoFramework.createCipher('AES128|CBC|PKCS5')
//4.init cipher
await aesCipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, key, null)
//5.解密
let clearText = await aesCipher.doFinal({ data: this.stringToUint8Array(content)})
//6.返回解密结果
return that.encodeToStringSync(clearText.data)
} catch (error) {
return ''
}
}
static stringToUint8Array(str:string) {
var arr = [];
for (var i = 0, j = str.length ; i < j ; ++i) {
arr.push(str.charCodeAt(i));
}
var tempArray = new Uint8Array(arr);
return tempArray;
}
static uint8ArrayToString(array:Uint8Array) {
var arrayString = '';
for (let i = 0;i<array.length;i++) {
arrayString += String.fromCharCode(array[i]);
}
return arrayString;
}
}