HarmonyOS鸿蒙Next中实现通用密钥管理功能示例代码
HarmonyOS鸿蒙Next中实现通用密钥管理功能示例代码
介绍
本示例展示了密钥管理,包括:密钥生成/销毁、密钥导入、密钥证明、密钥协商、密钥派生相关功能。以及秘钥使用,包括:加解密、签名/验签、访问控制相关功能。
效果预览

使用说明
点击对应模式按钮即可展示结果。
实现思路
- 模拟加密场景,首先获取密钥别名、待加密的数据与加密算法参数配置,后调用initSession获取handle,调用finishSession获取加密后的密文。
export async function encryptData(data2Encrypt: string) {
let encryptProperties = getAesGcmEncryptProperties();
let options: huks.HuksOptions = {
properties: encryptProperties,
inData: stringToUint8Array(data2Encrypt)
}
await huks.initSession(keyAlias, options)
.then((data) => {
handle = data.handle;
}).catch((error: Error) => {
hilog.error(0xd000,'promise: init EncryptDataGcm failed, %{public}s',JSON.stringify(error))
})
await huks.finishSession(handle, options)
.then((data) => {
cipherData = data.outData as Uint8Array;
}).catch((error: Error) => {
hilog.error(0xd000,'promise: encrypt data failed, %{public}s',JSON.stringify(error))
})
}
- 模拟解密场景,首先获取密钥别名、待解密的密文和解密算法参数配置,后调用initSession获取handle,调用finishSession获取解密后的数据。
export async function decryptDataImpl() {
let result: string = '';
let decryptOptions = getAesGcmDecryptProperties(cipherData)
let options: huks.HuksOptions = {
properties: decryptOptions,
inData: cipherData.slice(0, cipherData.length-16)
}
await huks.initSession(keyAlias, options)
.then((data) => {
handle = data.handle;
}).catch((error: Error) => {
hilog.error(0xd000,'promise: init DecryptDataGcm failed, %{public}s',JSON.stringify(error))
})
await huks.finishSession(handle, options)
.then((data) => {
result = uint8ArrayToString(data.outData as Uint8Array);
}).catch((error: Error) => {
hilog.error(0xd000,'promise: decrypt data failed, %{public}s',JSON.stringify(error))
})
return result;
}
更多关于HarmonyOS鸿蒙Next中实现通用密钥管理功能示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
在HarmonyOS鸿蒙Next中,通用密钥管理功能可以通过@ohos.security.cryptoFramework模块实现。以下是一个示例代码,展示了如何生成、存储和使用对称密钥。
import cryptoFramework from '@ohos.security.cryptoFramework';
async function generateAndStoreKey() {
try {
// 创建对称密钥生成器
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
// 生成对称密钥
let symKey = await symKeyGenerator.generateSymKey();
// 获取密钥的二进制数据
let keyData = await symKey.getEncoded();
// 存储密钥数据到系统密钥库
let keyAlias = 'my_aes_key';
let keyProperties = {
alias: keyAlias,
purpose: cryptoFramework.KeyPurpose.ENCRYPT | cryptoFramework.KeyPurpose.DECRYPT,
blockMode: cryptoFramework.CryptoMode.CBC,
padding: cryptoFramework.CryptoPadding.PKCS7,
isKeyAccessibleAfterBiometricAuthentication: false
};
await cryptoFramework.keyManager.importKey(keyAlias, keyData, keyProperties);
console.log('Key generated and stored successfully.');
} catch (error) {
console.error('Error in key generation or storage:', error);
}
}
async function useStoredKey() {
try {
let keyAlias = 'my_aes_key';
// 从系统密钥库中获取密钥
let symKey = await cryptoFramework.keyManager.getKey(keyAlias);
// 使用密钥进行加密操作
let cipher = cryptoFramework.createCipher('AES256|CBC|PKCS7');
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT, symKey);
let plainText = 'Hello, HarmonyOS!';
let input = { data: new Uint8Array(plainText.split('').map(c => c.charCodeAt(0))) };
let encrypted = await cipher.doFinal(input);
console.log('Encrypted data:', encrypted.data);
} catch (error) {
console.error('Error in using stored key:', error);
}
}
// 生成并存储密钥
generateAndStoreKey().then(() => {
// 使用存储的密钥
useStoredKey();
});
该代码展示了如何使用@ohos.security.cryptoFramework模块生成对称密钥、存储密钥到系统密钥库,以及使用存储的密钥进行加密操作。
更多关于HarmonyOS鸿蒙Next中实现通用密钥管理功能示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,通用密钥管理功能可以通过security.keyChain模块实现。以下是一个简单的示例代码,展示如何生成、存储和获取密钥:
import ohos.security.keyChain.*;
public class KeyManagementExample {
public static void main(String[] args) {
try {
// 创建密钥生成器
KeyChain keyChain = KeyChain.getInstance();
// 生成密钥对
KeyPair keyPair = keyChain.generateKeyPair("RSA", 2048);
// 存储密钥
keyChain.storeKeyPair("myKeyAlias", keyPair);
// 获取密钥
KeyPair retrievedKeyPair = keyChain.getKeyPair("myKeyAlias");
System.out.println("Key retrieved successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
此代码展示了如何生成RSA密钥对、存储到密钥链中,并再次获取该密钥对。

