HarmonyOS 鸿蒙Next RSA公钥解密,注意是公钥解密

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

HarmonyOS 鸿蒙Next RSA公钥解密,注意是公钥解密 在官网上没有找到RSA公钥解密的代码,其他网站也基本没有,求一份RSA公钥解密的代码,注意是公钥解密

3 回复
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer, util } from '@kit.ArkTS';

@Entry
@Component
struct RSAReverseCrypto {
  @State message: string = '点击开始';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            RsaReverse()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

// 字符串转成字节流
export function stringToUint8Array(str: string) {
  return new Uint8Array(buffer.from(str,'utf-8').buffer);
}

// Uint8Array转成String
function uint8ArrayToString(input: Uint8Array): string {
  let textDecoder = util.TextDecoder.create('utf-8');
  return textDecoder.decodeWithStream(input);
}

// 公钥解密
function verifyMessage(pubKey: cryptoFramework.PubKey,signMessageBlob: cryptoFramework.DataBlob) {
  let verifyAlg = "RSA2048|PKCS1|NoHash|Recover";
  let verifier = cryptoFramework.createVerify(verifyAlg);
  verifier.initSync(pubKey);
  let rawSignData = verifier.recoverSync(signMessageBlob);
  console.log("rsa puk data " + uint8ArrayToString(rawSignData?.data))
  return rawSignData;
}

//私钥加密
function signMessage(priKey: cryptoFramework.PriKey, plainText:cryptoFramework.DataBlob) {
  let signAlg = "RSA2048|PKCS1|NoHash|OnlySign";
  let signer = cryptoFramework.createSign(signAlg);
  signer.initSync(priKey);
  let signData = signer.signSync({data:stringToUint8Array("私钥加密")});
  return signData;
}

// 密钥转换
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 = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
  console.info('convertKey success');
  return keyPair;
}

//Rsa 加解密
function RsaReverse() {
  let pkData = "xxxx";
  let skData = "xxxx"/*new Uint8Array()*/;
  let base64 = new util.Base64Helper();
  let pubKeyBlob = base64.decodeSync(pkData)
  let priKeyBlob = base64.decodeSync(skData);

  let keyPair = genKeyPairByData(pubKeyBlob, priKeyBlob);

  let pubKey = keyPair.pubKey
  let priKey = keyPair.priKey

  let message = "This is a test";
  let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
  let encryptText = signMessage(priKey, plainText);
  let decryptText = verifyMessage(pubKey, encryptText);
  // console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8'));

  /*if (plainText.data.toString() === decryptText.data.toString()) {
    console.info('decrypt ok');
  } else {
    console.error('decrypt failed');
  }*/
}

更多关于HarmonyOS 鸿蒙Next RSA公钥解密,注意是公钥解密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你的skData是啥呢,如果服务端只提供了pkData,怎么办,

在HarmonyOS(鸿蒙)系统中,关于RSA公钥解密的问题,首先需要明确的是,在传统的RSA加密体系中,公钥主要用于加密数据,而私钥用于解密数据。这是基于公钥加密体系(PKI)的基本原则,旨在确保数据的安全性。

然而,如果你确实需要在鸿蒙系统中实现所谓的“公钥解密”功能,这很可能意味着你需要采用某种特殊的加密模式或协议,这并非标准RSA操作。在标准RSA算法中,公钥解密在技术上是不可能的,因为公钥和私钥在数学上是成对出现的,各自承担不同的角色。

如果你是在尝试实现某种特定的安全通信协议,可能需要考虑使用其他加密算法或协议,或者重新设计你的加密方案,以确保它既符合安全标准,又能满足你的特定需求。

在鸿蒙系统中,你可以利用系统提供的加密库或API来实现标准的RSA加密和解密操作。如果你需要实现非标准的“公钥解密”功能,可能需要深入研究相关的加密算法和协议,或者寻求专业的安全咨询。

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

回到顶部