HarmonyOS 鸿蒙Next RSA,RAS/NULL/PKCS1Padding 加解密使用

HarmonyOS 鸿蒙Next RSA,RAS/NULL/PKCS1Padding 加解密使用

我的Java代码是这样的

byte[] test = "fjahfajfah".getBytes("utf-8");
String str = getPublicString(test,test());
System.out.println(str);
public static String getPublicString(byte[] test, RSAPublicKey key) throws Exception{
  Security.addProvider(new BouncyCastleProvider());
  Cipher cipher = Cipher.getInstance("RAS/NULL/PKCS1Padding");
  cipher.init(1,key);
  byte data[] = cipher.doFinal(new byte[]{});
  byte b[] = Base64.encodeBase64(data);
  String result = new String(b,"UTF-8");
  return result;
}

public static RSAPublicKey test() throws Exception {
  Security.addProvider(new BouncyCastleProvider());
  KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  X509EncodedKeySpec pubSpae = new X509EncodedKeySpec(Base64.decodeBase64(getPublicKey().getBytes("UTF-8")));
  RSAPublicKey pubKey = keyFactory.generatePrivate(pubSpae);
  return pubKey;
}

public String getPublicKey(){
  return "aaaabbbbccc";
}

请问使用arkts该怎么处理?


更多关于HarmonyOS 鸿蒙Next RSA,RAS/NULL/PKCS1Padding 加解密使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

rsa加解密参考此代码demo实例:

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

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

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

// 加密消息
async function encryptMessagePromise(publicKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) {
  let cipher = cryptoFramework.createCipher('RSA1024|PKCS1');
  await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, publicKey, null);
  let encryptData = await cipher.doFinal(plainText);
  return encryptData;
}

// 解密消息
async function decryptMessagePromise(privateKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) {
  let decoder = cryptoFramework.createCipher('RSA1024|PKCS1');
  await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, privateKey, null);
  let decryptData = await decoder.doFinal(cipherText);
  return decryptData;
}

// 生成RSA密钥对
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;
}

async function rsa1024Crypto() {
  // 服务区传入的公钥字符串
  let pkData = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Sgj+kjeK4GQP5nCxHryVNNpPQXEtidEJ1zDfZlrHSKuBpqC6DybMi7hwqQ13WP/E3jmiOs1o3hIlAuAXgNsChutFiRoKpAuQKQY9y4YchvYbDu9zg+vuOaKYinufY1l7p9kDhbozXM9fHKyXju7kZvYDG5T9VATYmQp9CwJTbAXqPz0/o+GJkCkbH1mXUH0kzQHRwXJ68ReqcmlTfe/ThIebSGA/eOvZwa7a3ahCeNJW+8jPfH24WREQ18+gUXIT7T9SU2s6iMpn4Q8yPOG5bdf9qhV1Ws33LVBExCVwoDOZFnJowB3dX3kk8m4LGM6wCA3DoDbtcr+CMWOccTchwIDAQAB';
  
  // 服务区传入的私钥字符串
  let skData = new Uint8Array();
  
  let base64 = new util.Base64Helper();
  let base64pkData = base64.decodeSync(pkData);
  let keyPair = await genKeyPairByData(base64pkData, skData);
  let pubKey = keyPair.pubKey;
  let priKey = keyPair.priKey;
  let message = 'This is a test';
  
  // 把字符串按utf-8解码为Uint8Array
  let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
  let encryptText = await encryptMessagePromise(pubKey, plainText);
  console.info('decryptText result string11111111:' + encryptText);
  console.info('decryptText result string22222222:' + encryptText.data);
  let encryptSting = base64.encodeToStringSync(encryptText.data);
  console.info('decryptText result string33333333:' + encryptSting);
  let messageEncrypted = buffer.from(encryptText.data).toString('utf-8');
  console.info('decrypted result string:' + messageEncrypted);
}

更多关于HarmonyOS 鸿蒙Next RSA,RAS/NULL/PKCS1Padding 加解密使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中进行RSA加解密操作时,使用特定的填充方式(如PKCS1Padding)是常见的需求。以下是如何在鸿蒙系统中进行RSA/NULL/PKCS1Padding加解密的简要说明(注意,这里不涉及Java或C语言的具体代码实现):

  1. RSA加密

    • 使用RSA公钥进行加密时,需指定填充方式为PKCS1Padding。这通常通过加密库的配置参数来实现。
    • 鸿蒙系统可能提供了内置的加密API或库,你可以查阅鸿蒙的开发者文档来找到具体的加密函数和参数设置方法。
  2. RSA解密

    • 使用RSA私钥进行解密时,同样需指定填充方式为PKCS1Padding。
    • 解密过程与加密类似,需要调用鸿蒙提供的解密函数,并正确设置填充方式和其他参数。
  3. 关于NULL填充

    • 如果需要使用NULL填充(即不进行填充),则需在加密和解密时明确指定。
    • 需要注意的是,NULL填充通常不如PKCS1Padding安全,因此在实际应用中应谨慎使用。

请注意,上述内容是基于鸿蒙系统的一般性说明,并未涉及具体的代码实现。如需更详细的操作指南或示例代码,建议直接查阅鸿蒙系统的官方文档或开发者指南。

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

回到顶部