#HarmonyOS NEXT体验官# 数据加密 2. 非对称密钥生成 原创
书接上一篇:
指定二进制数据转换对称密钥
function testConvertSymKey() {
// 创建SymKeyGenerator实例
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
// 根据指定的数据生成对称密钥
let keyMaterialBlob = genKeyMaterialBlob();
try {
symKeyGenerator.convertKey(keyMaterialBlob, (error, key) => {
if (error) { // 如果业务逻辑执行失败,则callback的第一个参数返回错误信息,即异步抛出异常
let e: BusinessError = error as BusinessError;
console.error(`convertKey error, ${e.code}, ${e.message}`);
return;
}
console.info('key algName:' + key.algName);
console.info('key format:' + key.format);
let encodedKey = key.getEncoded(); // 获取对称密钥的二进制数据,并以字节数组形式输出。长度为24字节
console.info('key getEncoded hex: ' + encodedKey.data);
})
} catch (error) { // 参数检查发现错误立即抛出异常
let e: BusinessError = error as BusinessError;
console.error(`convertKey failed, ${e.code}, ${e.message}`);
}
}
随机生成非对称密钥对
⚫ 以RSA为例,随机生成非对称密钥对(KeyPair),并获得二进制数据。
⚫ 非对称密钥对可用于后续加解密等操作,二进制数据可用于存储或运输。
随机生成非对称密钥对
⚫ 调用cryptoFramework.createAsyKeyGenerator,指定字符串参数
‘RSA1024|PRIMES_2’,创建RSA密钥类型为RSA1024、素数个数为2的非对
称密钥生成器(AsyKeyGenerator)。
⚫ 调用AsyKeyGenerator.generateKeyPair,随机生成非对称密钥对象
(KeyPair)。KeyPair对象中包括公钥PubKey、私钥PriKey。
⚫ 调用PubKey.getEncoded和PriKey.getEncoded,分别获取密钥对象的二进
制数据。
随机生成非对称密钥对
import cryptoFramework from '@ohos.security.cryptoFramework';
function generateAsyKey() {
// 创建一个AsyKeyGenerator实例
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');
// 使用密钥生成器随机生成非对称密钥对
let keyGenPromise = rsaGenerator.generateKeyPair();
keyGenPromise.then(keyPair => {
let pubKey = keyPair.pubKey;
let priKey = keyPair.priKey;
// 获取非对称密钥对的二进制数据
let pkBlob = pubKey.getEncoded();
let skBlob = priKey.getEncoded();
console.info('pk bin data' + pkBlob.data);
console.info('sk bin data' + skBlob.data);
});
}
指定二进制数据转换非对称密钥对
以RSA为例,根据指定的对称密钥二进制数据,生成非对称密钥对
(KeyPair)。即将外部或存储的二进制数据转换为算法库的密钥对象,该对
象可用于后续的加解密等操作。
指定二进制数据转换非对称密钥对
⚫ 获取RSA公钥或私钥二进制数据,封装成DataBlob对象。公钥和私钥可只传入其中一个,此
处示例以传入公钥为例。
⚫ 调用cryptoFramework.createAsyKeyGenerator,指定字符串参数’RSA1024’,创建RSA密
钥类型为RSA1024、素数个数为2的非对称密钥生成器(AsyKeyGenerator)。生成RSA非对
称密钥时,默认素数为2,此处省略了参数PRIMES_2。
⚫ 调用AsyKeyGenerator.convertKey,传入二进制密钥数据,生成非对称密钥对象
(KeyPair)。
指定二进制数据转换非对称密钥对
import cryptoFramework from '@ohos.security.cryptoFramework';
function convertAsyKey() {
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
let pkVal = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0,
48, 129, 137, 2, 129, 129, 0, 174, 203, 113, 83, 113, 3, 143, 213, 194, 79, 91, 9, 51, 142, 87, 45, 97, 65, 136,
24, 166, 35, 5, 179, 42, 47, 212, 79, 111, 74, 134, 120, 73, 67, 21, 19, 235, 80, 46, 152, 209, 133, 232, 87,
192, 140, 18, 206, 27, 106, 106, 169, 106, 46, 135, 111, 118, 32, 129, 27, 89, 255, 183, 116, 247, 38, 12, 7,
238, 77, 151, 167, 6, 102, 153, 126, 66, 28, 253, 253, 216, 64, 20, 138, 117, 72, 15, 216, 178, 37, 208, 179,
63, 204, 39, 94, 244, 170, 48, 190, 21, 11, 73, 169, 156, 104, 193, 3, 17, 100, 28, 60, 50, 92, 235, 218, 57, 73,
119, 19, 101, 164, 192, 161, 197, 106, 105, 73, 2, 3, 1, 0, 1]);
let pkBlob: cryptoFramework.DataBlob = { data: pkVal };
rsaGenerator.convertKey(pkBlob, null, (err, keyPair) => {
if (err) {
console.error(`convertKey failed, ${err.code}, ${err.message}`);
return;
}
console.info('convertKey success');
});
}