HarmonyOS 鸿蒙Next中关于私钥SHA256加签方法

HarmonyOS 鸿蒙Next中关于私钥SHA256加签方法

看着是通过私钥和SHA256加签方法

想问下对应的鸿蒙方法是什么?

如下

let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(content.substring(0,content.length/2), 'utf-8').buffer) };

let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(content.substring(content.length/2,content.length), 'utf-8').buffer) };

let base64 = new util.Base64Helper()

let pkData = new Uint8Array(buffer.from('', 'utf-8').buffer);

let skData = base64.decodeSync(SIGN_PrivateKey);

// 生成公私密钥对

let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData };

let priKeyBlob: cryptoFramework.DataBlob = { data: skData };

let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');

let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob);

let signData = await signMessagePromise(keyPair.priKey,input1,input2);

return signData.data

更多关于HarmonyOS 鸿蒙Next中关于私钥SHA256加签方法的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer, util } from '@kit.ArkTS';
@Entry
@Component
struct CryptPage {
  @State message: string = '点击开始';
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            convertAsyKey()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

export async function signMessagePromise(content: cryptoFramework.DataBlob, priKey: cryptoFramework.PriKey) {
  let signAlg = "RSA1024PKCS1|SHA256"; // 签名算法规格
  let signer = cryptoFramework.createSign(signAlg);
  await signer.init(priKey);
  let signData = await signer.sign(content);
  return signData;
}

export async function verifyMessagePromise(content: cryptoFramework.DataBlob, signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) {
  let verifyAlg = "RSA1024|PKCS1|SHA256"; // 签名算法规格
  let verifier = cryptoFramework.createVerify(verifyAlg);
  await verifier.init(pubKey);
  let res = await verifier.verify(content, signMessageBlob);
  console.info("verify result is " + res);
  return res;
}

export async function convertAsyKey() {
  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA2048');
  // 随机生成的公私钥对,Base64格式
  let pubKeyVal = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAn7UujTR0CX1ujnNn70MtLlSESk/Y6fBsSw3s9/XqkuiXbGPUzkNbP0rldmTfzLEw/bhu43/v4mbeq18OAoIdpW/I4OhNSMhAO+c0Urjmqp0/p/0xEPO8r42g1OExaGdioLj9CUw18ODEG8nNhW/Py0NN002G87wJm/bYwG0OhwIDAQAB";
  let priKeyVal = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMCftS6NNHQJfW6Oc2fvQy0uVIRKT9jp8GxLDez39eqS6JdsY9TOQ1s/P...";

  let pkBlob: cryptoFramework.DataBlob = { data: stringToUnit8Array(pubKeyVal) };
  let prBlob: cryptoFramework.DataBlob = { data: stringToUnit8Array(priKeyVal) };
  rsaGenerator.convertKey(pkBlob, prBlob, async (err, keyPair) => {
    if (err) {
      console.error(`convertKey failed, ${err.code}, ${err.message}`);
      return;
    }
    console.info('convertKey success!');
    let plainText: string = "test";
    let res = await signMessagePromise({ data: new Uint8Array(buffer.from(plainText, 'utf-8').buffer) }, keyPair.priKey)
    console.log(`convertKey sign result:${new util.Base64Helper().encodeToStringSync(res.data)}`)
    let verifyResult = await verifyMessagePromise({
      data: new Uint8Array(buffer.from(plainText, 'utf-8').buffer)
    }, res, keyPair.pubKey);
    if (verifyResult == true) {
      console.info('convertKey verify success');
    } else {
      console.error('convertKey verify failed');
    }
  });
}

export function stringToUnit8Array(str: string): Uint8Array {
  return new util.Base64Helper().decodeSync(str)
}

更多关于HarmonyOS 鸿蒙Next中关于私钥SHA256加签方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,实现私钥SHA256加签可以通过使用CryptoFramework模块来完成。首先,需要使用KeyPairGenerator生成密钥对,然后使用Sign类进行签名操作。具体步骤如下:

  1. 生成密钥对:使用KeyPairGenerator生成RSA或ECC密钥对。

    let keyPairGenerator = cryptoFramework.createKeyPairGenerator("RSA1024|PRIMES_2");
    let keyPairPromise = keyPairGenerator.generateKeyPair();
    
  2. 创建签名对象:使用Sign类创建签名对象,并指定算法为SHA256。

    let sign = cryptoFramework.createSign("RSA1024|SHA256");
    
  3. 初始化签名对象:使用私钥初始化签名对象。

    keyPairPromise.then(keyPair => {
        sign.init(keyPair.priKey);
    });
    
  4. 更新数据:将要签名的数据更新到签名对象中。

    let data = "data to be signed";
    sign.update(data);
    
  5. 执行签名:调用sign方法进行签名,获取签名结果。

    let signPromise = sign.sign(null);
    signPromise.then(signature => {
        console.log("Signature: " + signature.data);
    });
    

以上步骤实现了在HarmonyOS鸿蒙Next中使用私钥进行SHA256加签的过程。

在HarmonyOS鸿蒙Next中,使用SHA256对私钥进行加签的步骤如下:

  1. 获取私钥:通过KeyPairGenerator生成或从密钥库中获取私钥。
  2. 创建签名实例:使用Signature类,指定算法为"SHA256withRSA"。
  3. 初始化签名:调用initSign(privateKey)方法,传入私钥。
  4. 更新数据:通过update(data)方法,传入待签名的数据。
  5. 生成签名:调用sign()方法,生成签名结果。

示例代码:

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

确保处理私钥时注意安全性,避免泄露。

回到顶部