HUKS 可以为不同的业务需求生成随机的安全密钥。这些密钥的整个生命周期中,其明文(未加密形式)都会被保留在一个安全的环境中,这个环境通常是硬件安全模块或者受信任的执行环境,以防止密钥被泄露。即使是生成这些密钥的应用程序或服务,在未来需要使用这些密钥的时候,也只能通过 HUKS 提供的API来执行加密操作,并且只能获得操作的结果,而不能直接接触到密钥本身。
示例代码:
import huks from '@ohos.security.huks';
// 定义密钥别名
const keyAlias = 'dh_key';
// 初始化密钥属性集
const properties = [
{ tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_DH },
{ tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_AGREE },
{ tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_DH_KEY_SIZE_2048 },
{ tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }
];
// 创建HuksOptions对象
const huksOptions = {
properties,
inData: new Uint8Array([])
};
/**
* 异步生成密钥项
* @param {string} keyAlias 密钥别名
* @param {huks.HuksOptions} huksOptions 密钥选项
* @returns {Promise<any>} 返回Promise对象
*/
async function generateKeyItem(keyAlias, huksOptions) {
return new Promise((resolve, reject) => {
huks.generateKeyItem(keyAlias, huksOptions, (error, data) => {
if (error) {
reject(error);
} else {
resolve(data);
}
});
});
}
/**
* 公共生成密钥函数
* @param {string} keyAlias 密钥别名
* @param {huks.HuksOptions} huksOptions 密钥选项
*/
async function publicGenKeyFunc(keyAlias, huksOptions) {
console.info('进入generateKeyItem回调');
try {
const data = await generateKeyItem(keyAlias, huksOptions);
console.info(`generateKeyItem成功, 数据 = ${JSON.stringify(data)}`);
} catch (error) {
console.error(`generateKeyItem失败, 错误码: ${error.code}, 消息: ${error.message}`);
}
}
// 测试生成密钥
(async function testGenKey() {
await publicGenKeyFunc(keyAlias, huksOptions);
})();