如何使用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类进行验签操作。

  1. 创建CryptoFramework实例:
let cryptoFramework = require('@ohos.security.cryptoFramework');
  1. 生成或导入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;
});
  1. 验签操作:
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方法进行验签,返回布尔值表示验签结果。

回到顶部