HarmonyOS鸿蒙Next中aes解密
HarmonyOS鸿蒙Next中aes解密
下面是java的解密方法 encryptBytes 是jbase64解密的字符串,decryptKey是key,但是这个在 鸿蒙中如何使用aes解密?
private static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey ) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(2, new SecretKeySpec(decryptKey.getBytes(), "AES"));
byte[] decryptBytes = cipher.doFinal(encryptBytes);
return new String(decryptBytes);
}
更多关于HarmonyOS鸿蒙Next中aes解密的实战教程也可以访问 https://www.itying.com/category-93-b0.html
参考下demo:
import cryptoFramework from '@ohos.security.cryptoFramework';
import buffer from '@ohos.buffer';
import { util } from '@kit.ArkTS';
import { promptAction } from '@kit.ArkUI';
export const base64Util = new util.Base64Helper();
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Column() {
Button('点击解密').onClick(async () => {
let mes = await base64Util.decodeSync("bGc9apA8nSxuRV2hh6kV9aHGNdRgnURSAazK9Intipc=");
let str = await aesDecryptECB(mes, StringToUint8Array("KgCzT5a3t391fWqa"));
console.log(`解密result:${str}`)
promptAction.showToast({ message: `${str}`, duration: 5000 })
})
Button('点击加密').onClick(async () => {
let str = await aesEncryptECB(StringToUint8Array('Shangqingkuang123Lx'), StringToUint8Array("KgCzT5a3t391fWqa"));
promptAction.showToast({ message: `${str}`, duration: 5000 })
})
}.width('100%').height('100%').justifyContent(FlexAlign.Center)
}
}
export async function aesEncryptECB(text: Uint8Array, key: Uint8Array) {
let globalResult = ""
try {
let cipherAlgName = 'AES128|ECB|PKCS5';
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
let symAlgName = 'AES128';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
let keyBlob: cryptoFramework.DataBlob = { data: key }
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
await globalCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, promiseSymKey, null);
let plainText: cryptoFramework.DataBlob = { data: text }
let result = await globalCipher.doFinal(plainText)
let str = Uint8ArrayToHexStr(result.data)
console.log("加密后的密文==》" + str) //再解密验证
aesDecryptECB(HexStrTouint8Array(str), StringToUint8Array("KgCzT5a3t391fWqa"))
} catch (e) {
console.log(e.message)
}
return globalResult;
}
export async function aesDecryptECB(text: Uint8Array, key: Uint8Array) {
let globalResult = ""
try {
let cipherAlgName = 'AES128|ECB|PKCS5';
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
let symAlgName = 'AES128';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
let keyBlob: cryptoFramework.DataBlob = { data: key }
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
await globalCipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, promiseSymKey, null);
let plainText: cryptoFramework.DataBlob = { data: text }
let result = await globalCipher.doFinal(plainText)
globalResult = uint8ArrayToString(result.data);
console.log("解密后的明文==》" + globalResult)
} catch (err) {
console.log(err.message)
}
return globalResult;
}
export function uint8ArrayToString(input: Uint8Array) {
let textDecoder = util.TextDecoder.create('utf-8');
return textDecoder.decodeWithStream(input);
} //十六进制转Uint8Array
export function HexStrTouint8Array(data: string): Uint8Array {
return new Uint8Array(buffer.from(data, 'hex').buffer);
}
export function Uint8ArrayToHexStr(data: Uint8Array): string {
return buffer.from(data).toString('hex')
}
export function StringToUint8Array(str: String) {
let arr: number[] = new Array();
for (let i = 0, j = str.length; i < j; ++i) {
arr.push(str.charCodeAt(i));
}
return new Uint8Array(arr);
}
更多关于HarmonyOS鸿蒙Next中aes解密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,AES解密可以通过使用HUKS(Huawei Universal Keystore Service)模块来实现。HUKS提供了密钥管理功能,支持包括AES在内的多种加密算法。具体步骤包括:
- 初始化HUKS模块:首先需要初始化HUKS,使用
HuksInitParamSet进行参数配置,指定算法类型为AES。 - 生成或导入密钥:如果已有密钥,可以通过
HuksImportKey导入;如果需要生成密钥,使用HuksGenerateKey。 - 设置解密参数:使用
HuksDecryptParamSet配置解密参数,包括模式(如CBC、ECB等)、填充方式(如PKCS7)、IV(初始化向量)等。 - 执行解密操作:调用
HuksDecrypt函数,传入密文和配置好的参数,执行解密操作。 - 获取解密结果:解密完成后,
HuksDecrypt会返回解密后的明文。
需要注意的是,HUKS模块的使用需要遵循鸿蒙系统的安全规范,确保密钥的安全存储和管理。例如,密钥可以存储在安全芯片中,防止被恶意软件窃取。
此外,鸿蒙系统还提供了CryptoFramework,支持更高级的加密操作,包括AES解密。CryptoFramework提供了Cipher类,可以通过createCipher方法创建AES解密实例,然后使用init、update和doFinal方法进行解密操作。
总结来说,鸿蒙Next中AES解密的实现主要依赖于HUKS和CryptoFramework模块,开发者可以根据具体需求选择合适的API进行开发。
在HarmonyOS鸿蒙Next中进行AES解密,可以使用javax.crypto.Cipher类。首先,确保已导入必要的加密库。以下是基本步骤:
- 初始化Cipher:使用
Cipher.getInstance("AES")获取Cipher实例,并设置为解密模式。 - 配置密钥:使用
SecretKeySpec创建AES密钥。 - 执行解密:调用
cipher.doFinal(encryptedData)进行解密。
示例代码如下:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public String decryptAES(byte[] encryptedData, byte[] key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return new String(cipher.doFinal(encryptedData));
}
确保密钥和加密模式与加密时一致。

