HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错

publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDSL6iHVQbZBg+bV1WKYhuZcMKzPGOFc4sQyGPyjdJcgMniin6wELa5CPvPgMRv45RCKSRZYcIZ2J4O/cGKZqG2HxD9Wv0FfGHLGLOaGKH2fcDbYb4b2O0FrFqEzXFSsRiaeFbBSw6w0mgR0sK5NTHy+RghzEuaD/ZEpdjT5TTJwIDAQAB'
convertAsyKey() {
  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  let pkVal = this.stringToUint8Array(this.publicKey);
  let pkBlob: cryptoFramework.DataBlob = { data: pkVal };
  rsaGenerator.convertKey(pkBlob, null, (err, keyPair) => {
    if (err) {
      AlertDialog.show({ message: 'Convert keyPair fail' });
      return;
    }
    AlertDialog.show({ message: 'Convert keyPair success' });
  })
}

stringToUint8Array(str: string): Uint8Array {
  let arr = new Uint8Array(str.length);
  for (let i = 0, j = str.length; i < j; ++i) {
    arr[i] = str.charCodeAt(i);
  }
  return arr;
}

更多关于HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

上述的密钥是pem格式的,需要转化为der格式,需要转化之后再传入convertkey

正确的核心代码块应该是:

let rsaGenerator = cryptoFramework.createAsyKeyGenerator(‘RSA1024’);

let pkBlob :cryptoFramework.DataBlob;

let base64 = new util.Base64Helper();

pkBlob = { data: base64.decodeSync(this.publicKey) };

rsaGenerator.convertKey(pkBlob, null, (err, keyPair) => {

  if (err) {

    AlertDialog.show({ message: ‘Convert keyPair fail’ });

    return;

  }

  AlertDialog.show({ message: ‘Convert keyPair success’ });

})

附:PEM转换为DER格式的方法是去掉PEM文件首尾----BEGIN xxx----和----END xxx----两行,然后将内容合并为一行,最后将内容进行 Base64 解码,就可以的到DER格式

更多关于HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


import cryptoFramework from '@ohos.security.cryptoFramework'
import util from '@ohos.util'
import { Callback } from '@ohos.base';

let RSA_PUBLIC_KEY: string = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvbXcFbMCNaW84NdxeP3cZblJ//wKR4BXB6d1yFuCn1yzl8hlhqLS67RHqYBKDjcY5SXjKNLeEzyFBfBayij+GYODa0ozgFZN5KvwJM+k3WRtl3dTgWF3oxMLnzI/pdrgEyz3s22YTttCRJdrS/qMl4Onfh/jw1MUIOXhjXMYC+bXeGj7hUdKQr1/lMtkiI9x+iE/eCYSYS1e6bX5gpSy8kMJmbZjpqknEb7AukH4UWP4HH2rHCTAeTqW0RSYKm1q07ywmYPqPrDdPUCrehpOnzz8lgHZqq1UdW3vREX50p+QXfbbBSRp5cPBOE7dy069sjnA0HavsrGyKwicm2AITwIDAQAB"

/**
 * RSA非对称加密工具
 * wy
 */
export class RsaUtils {
  static rsa(password: string, callBack: Callback<string>) {

    let base64 = new util.Base64Helper();
    let data = base64.decodeSync(RSA_PUBLIC_KEY);

    let rsaGenerator: cryptoFramework.AsyKeyGenerator;
    rsaGenerator = cryptoFramework.createAsyKeyGenerator("RSA1024|PRIMES_2");
    let cipher = cryptoFramework.createCipher("RSA1024|PKCS1");

    let blob: cryptoFramework.DataBlob = { data: data };
    let now = Date.parse(new Date().toString());

    rsaGenerator.convertKey(blob, null)
      .then(keyPair => {
        let pubKey = keyPair.pubKey;
        cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, pubKey, null, (err, data) => {
          let plainText = password;
          let input: cryptoFramework.DataBlob = { data: RsaUtils.stringToUint8Array(plainText) };
          cipher.doFinal(input, (err, data) => {
            if (data) {
              let final = (base64.encodeToStringSync(data.data))
              callBack(final)
              console.log("wywy:", final)
            }
          });
        });
      })
      .catch(err => {

      });
  }

  static stringToUint8Array(str: string): Uint8Array {
    let arr: Array<number> = [];
    for (let i = 0, j = str.length; i < j; i++) {
      arr.push(str.charCodeAt(i));
    }
    return new Uint8Array(arr);
  }
}
用我的试试,把公钥换成你的

针对“HarmonyOS 鸿蒙Next RSA公钥满足标准,生成密钥对报错”的问题,以下是一些可能的解决方案,不涉及Java或C语言内容:

在HarmonyOS中生成RSA密钥对时,如果遇到报错,首先需要确认以下几点:

  1. 密钥长度:确保你使用的密钥长度符合HarmonyOS的安全标准。常见的RSA密钥长度有1024位、2048位等,但更长的密钥长度可能提供更好的安全性。检查你的代码中是否指定了合适的密钥长度。

  2. 算法参数:验证你的算法参数设置是否正确。例如,公钥和私钥的指数、模数等参数是否符合RSA算法的要求。

  3. API调用:检查你调用的API是否正确。HarmonyOS提供了专门的API用于生成密钥对,确保你使用的是这些API,并且传递的参数正确无误。

  4. 权限问题:在HarmonyOS中,生成密钥对可能需要特定的权限。检查你的应用是否已经声明了必要的权限。

  5. 环境配置:确认你的开发环境已经正确配置,包括所有必要的库和依赖项。

如果上述步骤都无法解决问题,可能是更深层次的系统或配置问题。此时,建议直接联系HarmonyOS的官方客服以获取更专业的帮助。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部