//AES128_ECB
//加密
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { base, stringToUint8Array, uint8ArrayToString } from './BaseUtil';
export async function aesEncrypt(text:string,puKey:string): Promise<string>{
let globalResult = ""
try {
//这里已AES加解密为例支持AES、SM4、3DES
let cipherAlgName = 'AES128|ECB|PKCS7';
// 创建加解密对象
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
//这里已AES加解密为例支持AES、SM4、3DES
let symAlgName = 'AES128';
//创建密钥对象
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
//将传入的base格式的密钥转为Uint8Array数组
let dataUint8Array = base.decodeSync(puKey)
let keyBlob: cryptoFramework.DataBlob = { data: dataUint8Array }
//导入外部密钥
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
//初始化
await globalCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, promiseSymKey, null);
//加密
let result = await globalCipher.doFinal({data:stringToUint8Array(text)})
//将加密结果转换为base64格式,用于保存或者传递
globalResult = base.encodeToStringSync(result.data);
} catch (err) {
console.log(err.message)
}
return globalResult;
}
// 解密
export async function aesDecrypt(text: string, key: string) {
let globalResult = ""
try {
//这里已AES加解密为例支持AES、SM4、3DES
let cipherAlgName = 'AES128|ECB|PKCS7';
// 创建加解密对象
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
//这里已AES加解密为例支持AES、SM4、3DES
let symAlgName = 'AES128';
//创建密钥对象
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
//将传入的base格式的密钥转为Uint8Array数组
let dataUint8Array = base.decodeSync(key)
let keyBlob: cryptoFramework.DataBlob = { data: dataUint8Array }
//导入外部密钥
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
await globalCipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, promiseSymKey, null);
let plainText: cryptoFramework.DataBlob = { data: base.decodeSync(text) }
let result = await globalCipher.doFinal(plainText)
//将解密后的结果result解码之后得到明文
globalResult = uint8ArrayToString(result.data);
console.log("解密后的明文==》" + globalResult)
} catch (err) {
console.log(err.message)
} finally {
return globalResult
}
}
baseutil工具类
import buffer from '@ohos.buffer';
import util from '@ohos.util';
export function uint8ArrayToHexStr(data: Uint8Array): string {
return buffer.from(data).toString('hex');;
}
//十六进制转Uint8Array
export function HexStrTouint8Array(data: string): Uint8Array {
return new Uint8Array(buffer.from(data, 'hex').buffer);
}
export const base = new util.Base64Helper();
// 字符串转成字节流
export function stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str,'utf-8').buffer);
}
// 字节流转成可理解的字符串
export function uint8ArrayToString(array:Uint8Array) {
// 将UTF-8编码转换成Unicode编码
let out: string = "";
let index: number = 0;
let len: number = array.length;
while (index < len) {
let character = array[index++];
switch(character >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
out += String.fromCharCode(character);
break;
case 12:
case 13:
out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F));
break;
case 14:
out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) | ((array[index++] & 0x3F) << 0));
break;
default:
break;
}
}
return out;
}
AES加解密demo:
baseutil工具类