如何使用AES算法加密 HarmonyOS 鸿蒙Next
如何使用AES算法加密 HarmonyOS 鸿蒙Next
具体实现可参考如下代码:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer, util } from '@kit.ArkTS';
@Entry
@Component
struct AESEncryptionDecryption {
build() {
Row() {
Button('加解密')
.onClick(async () => {
// 导入密钥
let key = await getKey();
// 加密
let globalResult = await aesEncrypt('测试', key);
// 解密
aesDecrypt(globalResult, key);
})
.width('100%')
.height(50)
}
.height('100%')
}
}
export const base = new util.Base64Helper();
// 字节流转成可理解的字符串
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;
}
// 字符串转成字节流
function stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}
// 获取密钥
async function getKey() {
let symAlgName = 'AES128';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
let dataUint8Array = stringToUint8Array('Whh82GtW/EVjBkD8');
let keyBlob: cryptoFramework.DataBlob = { data: dataUint8Array };
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob);
let key = base.encodeToStringSync(promiseSymKey.getEncoded().data); // 将密钥转换为base64存储
return key;
}
// 加密
async function aesEncrypt(text: string, puKey: string): Promise<string> {
let globalResult = '';
try {
let cipherAlgName = 'AES128|ECB|PKCS7';
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
let symAlgName = 'AES128';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
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) });
globalResult = base.encodeToStringSync(result.data);
console.info('加密后的明文:' + globalResult);
} catch (err) {
console.info(err.message);
}
return globalResult;
}
// 解密
async function aesDecrypt(text: string, key: string) {
let globalResult = '';
try {
let cipherAlgName = 'AES128|ECB|PKCS7';
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
let symAlgName = 'AES128';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
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);
globalResult = uint8ArrayToString(result.data);
console.info('解密后的明文:' + globalResult);
} catch (err) {
console.info(err.message);
}
}
更多关于如何使用AES算法加密 HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
uint8ArrayToString的实现太复杂了,可以参考下面代码
import { util } from '@kit.ArkTS'
export function Uint8ArrayToString(array: Uint8Array): string {
try {
let textDecoder = util.TextDecoder.create('utf-8')
let ret = textDecoder.decodeToString(array)
return ret
} catch (error) {
console.error(error, `error code: ${error.code}`)
return ''
}
}
更多关于如何使用AES算法加密 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中使用AES算法进行加密,可以通过鸿蒙提供的加解密框架实现。鸿蒙Next提供了cryptoFramework
模块,支持多种加密算法,包括AES。以下是一个使用AES算法加密的简单示例:
-
导入加解密框架:
import cryptoFramework from '[@ohos](/user/ohos).security.cryptoFramework';
-
创建AES加密器:
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128'); let symKey = symKeyGenerator.generateSymKey(); let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
-
初始化加密器并设置密钥:
cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
-
加密数据:
let plainText = 'This is a secret message'; let input = { data: stringToUint8Array(plainText) }; cipher.doFinal(input).then((output) => { let encryptedData = output.data; console.log('Encrypted Data:', uint8ArrayToString(encryptedData)); });
-
辅助函数
stringToUint8Array
和uint8ArrayToString
用于字符串与Uint8Array之间的转换:function stringToUint8Array(str) { let arr = new Uint8Array(str.length); for (let i = 0; i < str.length; i++) { arr[i] = str.charCodeAt(i); } return arr; } function uint8ArrayToString(uint8Array) { return String.fromCharCode.apply(null, uint8Array); }
以上代码展示了如何在鸿蒙Next中使用AES算法进行数据加密。cryptoFramework
模块提供了丰富的加解密功能,开发者可以根据需求选择合适的算法和模式。