HarmonyOS鸿蒙Next中怎么使用字符串类型的私钥加签(算法:RSA1024+SHA1)

HarmonyOS鸿蒙Next中怎么使用字符串类型的私钥加签(算法:RSA1024+SHA1)

这是对应的JS代码,使用jsrsasign库进行加签

import { KJUR, hex2b64 } from 'jsrsasign'
const RSA = new KJUR.crypto.Signature({
  alg: 'SHA1withRSA',
  prov: 'cryptojs/jsrsa',
  prvkeypem: PRIVATE_KEY,
})
let sign = '加密内容'
RSA.updateString(sign )
sign = RSA.sign()
sign = hex2b64(sign)
console.log('sign: ', sign)

想实现一个鸿蒙版本的RSA+SHA1加签,但是看了很久文档,密钥传不进去,代码如下:

let signer = cryptoFramework.createSign("RSA1024");
signner.init(prikey)

这个prikey是我本地的字符串类型的私钥,不需要密钥生成器生成一个keyPair对象,怎么直接使用我本地的字符串私钥加签,省略掉文档里描述的那样繁琐的流程


更多关于HarmonyOS鸿蒙Next中怎么使用字符串类型的私钥加签(算法:RSA1024+SHA1)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

符串类型的私钥必须要使用 rsaGenerator.convertKey 进行转录。转录 demo 如下:

async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
  let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);
  console.info('convertKey success');
  return keyPair;
}

RSA1024 的相关 demo 参考链接:[使用 RSA 非对称密钥(PKCS1 模式)加解密 - 加解密开发指导 - 加解密 - Crypto Architecture Kit(加解密算法框架服务) - 安全 - 系统 - 华为 HarmonyOS 开发者 (huawei.com)]

更多关于HarmonyOS鸿蒙Next中怎么使用字符串类型的私钥加签(算法:RSA1024+SHA1)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用字符串类型的私钥进行RSA1024+SHA1加签可以通过cryptoFramework模块实现。首先,确保你已经导入了cryptoFramework模块。以下是一个简单的示例代码,展示如何进行加签:

import cryptoFramework from '@ohos.security.cryptoFramework';

async function signData(privateKeyStr: string, data: string): Promise<Uint8Array> {
    // 创建RSA密钥生成器
    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2');

    // 将字符串类型的私钥转换为密钥对象
    let privateKeyBlob: cryptoFramework.DataBlob = { data: new Uint8Array(privateKeyStr.split('').map(char => char.charCodeAt(0))) };
    let privateKey = await rsaGenerator.convertKey(privateKeyBlob, null, true);

    // 创建签名实例
    let signer = cryptoFramework.createSign('RSA1024|SHA1');

    // 初始化签名实例
    await signer.init(privateKey);

    // 添加待签名数据
    let dataBlob: cryptoFramework.DataBlob = { data: new Uint8Array(data.split('').map(char => char.charCodeAt(0))) };
    await signer.update(dataBlob);

    // 执行签名操作
    let signature = await signer.sign(dataBlob);

    return signature.data;
}

在这个示例中,privateKeyStr是字符串类型的私钥,data是待签名的数据。signData函数返回签名后的数据,类型为Uint8Array

在HarmonyOS鸿蒙Next中,使用字符串类型的RSA1024私钥进行SHA1加签,可通过以下步骤实现:

  1. 导入密钥:将私钥字符串转换为KeySpec对象。
  2. 获取私钥:使用KeyFactory生成PrivateKey
  3. 初始化签名器:创建Signature实例,指定算法为SHA1withRSA
  4. 加签:使用私钥初始化签名器,传入待签名的数据,调用sign方法获取签名结果。

示例代码:

String privateKeyStr = "私钥字符串";
byte[] data = "待签名的数据".getBytes();

KeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decode(privateKeyStr, Base64.DEFAULT));
PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(keySpec);

Signature signature = Signature.getInstance("SHA1withRSA");
signature.initSign(privateKey);
signature.update(data);
byte[] signResult = signature.sign();

确保处理异常和密钥格式正确。

回到顶部