HarmonyOS鸿蒙Next中如何将Java的rsa签名翻译过来?

HarmonyOS鸿蒙Next中如何将Java的rsa签名翻译过来?

HarmonyOS如何将Java的中rsa签名翻译过来?

/**
 * RSA验证签名
 *
 * @param plainBytes 需要签名的数据
 * @param signedBytes 已经签名的数据
 * @param PublicKey 公钥
 * @return
 * @throws Exception
 */
public static boolean verifyRSA(byte[] plainBytes, byte[] signedBytes, String PublicKey) throws Exception {
 String SIGNATURE_ALGORITHM = "SHA1withRSA";
 Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
 signature.initVerify(getPublicKey(PublicKey));
 signature.update(plainBytes);

 //Base64编码
 return signature.verify(android.util.Base64.decode(new String(signedBytes, APP_UNICODE_TYPE), android.util.Base64.NO_WRAP));
}

这是Java代码,在HarmonyOS上我没看到这种SHA1withRSA格式的

更多关于HarmonyOS鸿蒙Next中如何将Java的rsa签名翻译过来?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

参考demo

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 = "RSA2048|PKCS1|SHA1"; // 签名算法规格
  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 = "RSA2048|PKCS1|SHA1"; // 签名算法规格
  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 = "";
  let priKeyVal = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIb6iT4b3FZeLkNnAEgYnbdHgKqFQ+i4m28zJfIkJP3+zd1OdhE8KS1Mp56IwwLV7lQgai+0z6/SeXRLk/Wdn9NqkB5RRk3hdvYkIDBAYSiJR4OsIxTURp9gTOUgzbAlza6uIHpRGIGVteeagMHoZXgfjSdTRdQxoXUXK50eoPffAgMBAAECgYAjhP5kp7Q9zh7igdJjJocqWdiUBumt7haJFq6fn79UT58g46rSMkCruQZLA7Y9ospKvRT0ZOJaZEqtWMEg20/ZUtQfWUOpI0V1zp1PFysSwwL9SWJs9p3uuOS9IDp5Ra4lC+OcsCaSLmbnk1/BhqFXcOIL0VDYQCuB6tIdWA0cUQJBALwmJXOEy7riox0TU9Mv6Rw/QfJIXSwrMDgnt62VEAfdH0NlSbApA51kbzjOupytNVJy43Rpd/uxI/Qw5e6dT70CQQC3p7h7YmlghYYPZ9v5YHuDZBtsQQwDvajUE6GxsNb6aWjSa/lDk96t38uIoFnLCfYdFv0xWqFAAa7i+LHAjwHLAkBMIUtKINOmvQmvPCDQ9TPnwBjZBjrdImSSdE+4Jvajl++Mf7F/XDkgOIFghRWxS8ylneM3OW3ZI+YeaqK/GFwpAkB+Er/cy4DlRqPx3W0vcuE3IDiHBtw1kTPdaiCct3XMbyILGR4DGvZJTBEPmGwrqonuDEMBZ2K8aqtgmjKDqmgjAkEAp3v1uyl6pTp4El5lgqZw5VR7czmXLDWGFZTAaTP/VLSNa5ppFFTrgcxcYfGeHch9GuwhWkivMo8o6pCQZIsLFw==";
  // let pkBlob: cryptoFramework.DataBlob = { data: stringToUnit8Array(pubKeyVal) };
  let prBlob: cryptoFramework.DataBlob = { data: stringToUnit8Array(priKeyVal) };
  rsaGenerator.convertKey(null, prBlob, async (err, keyPair) => {
    if (err) {
      console.error(`convertKey failed, ${err.code}, ${err.message}`);
      return;
    }
    console.info('convertKey success!');
    let plainText: string = "1234";
    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中如何将Java的rsa签名翻译过来?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,若要将Java的RSA签名功能翻译过来,可以使用鸿蒙提供的CryptoFramework模块。CryptoFramework是鸿蒙系统中用于加密、解密、签名、验签等操作的框架。

具体步骤如下:

  1. 导入相关模块:首先需要导入CryptoFramework模块。

    import cryptoFramework from '[@ohos](/user/ohos).security.cryptoFramework';
    
  2. 创建密钥生成器:使用CryptoFramework创建RSA密钥生成器。

    let keyGen = cryptoFramework.createAsyKeyGenerator("RSA1024|PRIMES_2");
    
  3. 生成密钥对:通过密钥生成器生成RSA密钥对。

    keyGen.generateKeyPair((err, keyPair) => {
        if (err) {
            console.error("generateKeyPair error: " + err.code);
            return;
        }
        let pubKey = keyPair.pubKey;
        let priKey = keyPair.priKey;
    });
    
  4. 创建签名对象:使用生成的私钥创建签名对象。

    let signer = cryptoFramework.createSign("RSA1024|PKCS1|SHA256");
    signer.init(priKey, (err) => {
        if (err) {
            console.error("signer init error: " + err.code);
            return;
        }
    });
    
  5. 更新数据并签名:将需要签名的数据更新到签名对象中,并生成签名。

    let data = "data to be signed";
    signer.update(data, (err) => {
        if (err) {
            console.error("signer update error: " + err.code);
            return;
        }
        signer.sign(data, (err, signature) => {
            if (err) {
                console.error("signer sign error: " + err.code);
                return;
            }
            console.info("Signature: " + signature);
        });
    });
    

通过以上步骤,你可以在HarmonyOS鸿蒙Next中实现与Java RSA签名相同的功能。

在HarmonyOS鸿蒙Next中,将Java的RSA签名翻译过来,可以使用OpenHarmony提供的cryptoFramework模块。首先,通过cryptoFramework.createAsyKeyGenerator生成RSA密钥对,然后使用cryptoFramework.createSign创建签名对象。设置私钥后,调用sign.init初始化签名,再使用sign.update传入待签名数据,最后通过sign.sign生成签名。具体代码可参考OpenHarmony官方文档。

回到顶部