对应的算法规格请查看密钥派生算法规格:PBKDF2。
构造PBKDF2Spec对象,作为密钥派生参数进行密钥派生。
PBKDF2Spec是KdfSpec的子类,需要指定:
algName:指定算法'PBKDF2'。
password:用于生成派生密钥的原始密码。
如果使用string类型,需要直接传入用于密钥派生的数据,而不是HexString、Base64等字符串类型。同时需要确保该字符串为utf-8编码,否则派生结果会有差异。
salt:盐值。
iterations:重复运算的次数,需要为正整数。
keySize:目标密钥的字节长度,需要为正整数。
调用cryptoFramework.createKdf,指定字符串参数'PBKDF2|SHA256',创建密钥派生算法为PBKDF2、HMAC函数摘要算法为SHA256的密钥派生函数对象(Kdf)。
输入PBKDF2Spec对象,调用Kdf.generateSecret进行密钥派生。
Kdf.generateSecret的多种调用形式如表所示。
| 接口名 | 返回方式 |
|---|---|
| generateSecret(params: KdfSpec, callback: AsyncCallback<DataBlob>): void | callback异步生成。 |
| generateSecret(params: KdfSpec): Promise<DataBlob> | Promise异步生成。 |
| generateSecretSync(params: KdfSpec): DataBlob | 同步生成。 |
通过await返回结果:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { BusinessError } from '@kit.BasicServicesKit';
async function kdfAwait() {
try {
let spec: cryptoFramework.PBKDF2Spec = {
algName: 'PBKDF2',
password: '123456',
salt: new Uint8Array(16),
iterations: 10000,
keySize: 32
};
let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
let secret = await kdf.generateSecret(spec);
console.info('key derivation output: ' + secret.data);
} catch (err) {
let e: BusinessError = err as BusinessError;
console.error(`call failed: errCode: ${e.code}, errMsg: ${e.message}`);
}
} 通过Promise返回结果:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { BusinessError } from '@kit.BasicServicesKit';
function kdfPromise() {
let spec: cryptoFramework.PBKDF2Spec = {
algName: 'PBKDF2',
password: '123456',
salt: new Uint8Array(16),
iterations: 10000,
keySize: 32
};
let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
let kdfPromise = kdf.generateSecret(spec);
kdfPromise.then((secret) => {
console.info('key derivation output: ' + secret.data);
}).catch((error: BusinessError) => {
console.error(`key derivation failed: errCode: ${error.code}, message: ${error.message}`);
});
} 通过同步方式返回结果:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { BusinessError } from '@kit.BasicServicesKit';
function kdfSync() {
try {
let spec: cryptoFramework.PBKDF2Spec = {
algName: 'PBKDF2',
password: '123456',
salt: new Uint8Array(16),
iterations: 10000,
keySize: 32
};
let kdf = cryptoFramework.createKdf('PBKDF2|SHA256');
let secret = kdf.generateSecretSync(spec);
console.info('[Sync]key derivation output: ' + secret.data);
} catch (err) {
let e: BusinessError = err as BusinessError;
console.error(`call failed: errCode: ${e.code}, errMsg: ${e.message}`);
}
}