如何使用RSA验签 HarmonyOS 鸿蒙Next
如何使用RSA验签 HarmonyOS 鸿蒙Next
问题场景
async verify(oriStr: string, signStr: string, pubKeyStr: string): Promise<boolean> {
logger.info(verify(oriStr: ${oriStr}, signStr: ${signStr}, pubKeyStr: ${pubKeyStr}));
let verifyAlg = "RSA|PKCS1|SHA1";let verifier = cryptoFramework.createVerify(verifyAlg);
let pubKey: cryptoFramework.PubKey = await this.genRSAPubKey(this.decodeBase64(pubKeyStr));
await verifier.init(pubKey);
let oriData = new Uint8Array(buffer.from(oriStr, 'utf-8').buffer);
let oriBlob: cryptoFramework.DataBlob = { data: oriData };
let signData = this.decodeBase64(signStr);
let signBlob: cryptoFramework.DataBlob = { data: signData };
let res = await verifier.verify(oriBlob, signBlob); return res;
}
private async genRSAPubKey(pubKeyData: Uint8Array): Promise<cryptoFramework.PubKey> {
let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA');
let KeyPair = await rsaGenerator.convertKey(pubKeyBlob, null);
return KeyPair.pubKey;
}
报如下错误:
02-28 10:37:21.965 19470-19470 C02F10/[HCF] com.pinga…ion.demo E HcfAsyKeyGeneratorCreate: Failed to parser parmas!
02-28 10:37:21.965 19470-19470 C02F10/[HCF] com.pinga…ion.demo E CreateJsAsyKeyGenerator: create c generator fail.
02-28 10:37:21.965 19470-19470 C03F00/ArkCompiler com.pinga…ion.demo E [ecmascript] pending exception before jsnapi interface called, which is IsMixedDebugEnabled in line: 532
02-28 10:37:21.965 19470-19470 C03F00/ArkCompiler com.pinga…ion.demo E [ecmascript] print exception info:
02-28 10:37:21.965 19470-19470 C03F00/ArkCompiler com.pinga…ion.demo E Error: create c generator fail.
02-28 10:37:21.965 19470-19470 C03F00/ArkCompiler com.pinga…ion.demo E at genRSAPubKey (common/src/main/ets/utils/EncryptUtils.ets:98:28)
02-28 10:37:21.965 19470-19470 C03F00/ArkCompiler com.pinga…ion.demo E at verify (common/src/main/ets/utils/EncryptUtils.ets:66:52)
02-28 10:37:21.965 19470-19470 C03F00/ArkCompiler com.pinga…ion.demo E at run (auth/src/main/ets/LocalAuth.ets:58:32)
解决措施
把let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA')
改成let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024')
即可。
更多关于如何使用RSA验签 HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于如何使用RSA验签 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用RSA验签可以通过CryptoFramework
模块实现。首先,创建CryptoFramework
实例,然后生成或导入RSA密钥对。使用Sign
类进行验签操作。
- 创建CryptoFramework实例:
let cryptoFramework = require('@ohos.security.cryptoFramework');
- 生成或导入RSA密钥对:
let keyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');
keyGenerator.generateKeyPair((err, keyPair) => {
if (err) {
console.error('generateKeyPair failed');
return;
}
let pubKey = keyPair.pubKey;
let priKey = keyPair.priKey;
});
- 验签操作:
let sign = cryptoFramework.createSign('RSA1024|PKCS1|SHA256');
sign.initVerify(pubKey).then(() => {
return sign.verify(data, signature);
}).then((result) => {
if (result) {
console.log('验签成功');
} else {
console.log('验签失败');
}
}).catch((err) => {
console.error('验签失败', err);
});
其中,data
是原始数据,signature
是待验证的签名。通过verify
方法进行验签,返回布尔值表示验签结果。