RSA NoPadding模式加密失败

RSA使用PKCS1模式可以正常加解密,使用NoPadding模式调用cipher.doFinal(plainText)加密数据抛出异常,无法正常使用。下面是示例代码:可在IDE中直接运行

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

export class RSA {
  static async testPKCS1() {
    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
    // 使用密钥生成器随机生成非对称密钥对
    let keypair = await rsaGenerator.generateKeyPair();
    let pubkey = keypair.pubKey
    let prikey = keypair.priKey
    let message = "hello world"
    let plainText: cryptoFramework.DataBlob = {data: new Uint8Array(buffer.from(message, "utf-8").buffer)}
    //加密
    let cipher = cryptoFramework.createCipher('RSA1024|PKCS1');
    await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, pubkey, null);
    let encryptData = await cipher.doFinal(plainText);
    //解密
    let decoder = cryptoFramework.createCipher('RSA1024|PKCS1');
    await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, prikey, null);
    let decryptData = await decoder.doFinal(encryptData);
    let messageDecrypted = buffer.from(decryptData.data).toString("utf-8")
    return messageDecrypted
    console.log(messageDecrypted)
  }
  static async testNoPadding() {
    let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
    // 使用密钥生成器随机生成非对称密钥对
    let keypair = await rsaGenerator.generateKeyPair();
    let pubkey = keypair.pubKey
    let prikey = keypair.priKey
    let message = "hello world"
    let plainText: cryptoFramework.DataBlob = {data: new Uint8Array(buffer.from(message, "utf-8").buffer)}
    //加密
    let cipher = cryptoFramework.createCipher('RSA1024|NoPadding');
    await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, pubkey, null);
    let encryptData = await cipher.doFinal(plainText);
    //解密
    let decoder = cryptoFramework.createCipher('RSA1024|NoPadding');
    await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, prikey, null);
    let decryptData = await decoder.doFinal(encryptData);
    let messageDecrypted = buffer.from(decryptData.data).toString("utf-8")
    return messageDecrypted
    console.log(messageDecrypted)
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
应用安全
HarmonyOS NEXT
2024-05-15 16:32:20
2265浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Caesari

NoPadding:不带填充,输入的数据必须与RSA钥模(即RSA模数n的字节长度)一样长;输出数据长度与RSA钥模一样长。

参考文档:​​非对称密钥加解密算法规格​


已于2024-5-16 12:24:29修改
分享
微博
QQ
微信
回复
2024-05-16 12:24:03


相关问题
HarmonyOS AES128/CBC/NoPadding加密模式报错
714浏览 • 1回复 待解决
HarmonyOS RSA加密失败问题
882浏览 • 1回复 待解决
HarmonyOS SM4-ECB-NoPadding加密
633浏览 • 1回复 待解决
HarmonyOS AES加密/RSA加密问题
1062浏览 • 1回复 待解决
HarmonyOS AES128|CBC|NoPadding 加密报错
699浏览 • 1回复 待解决
HarmonyOS RSA加密方式
1590浏览 • 1回复 待解决
HarmonyOS 实现RSA加密功能
1079浏览 • 1回复 待解决
HarmonyOS RSA分段加密乱码
1514浏览 • 1回复 待解决
HarmonyOS rsa加密报错
928浏览 • 1回复 待解决
HarmonyOS RSA加密算法实现
1061浏览 • 1回复 待解决
HarmonyOS rsa加密返回401错误
823浏览 • 1回复 待解决
HarmonyOS RSA私钥加密公钥解密
1072浏览 • 1回复 待解决
HarmonyOS 请问ArkTS如何实现RSA加密
1386浏览 • 1回复 待解决
HarmonyOS RSA加密中,公私钥问题
981浏览 • 1回复 待解决
HarmonyOS SM4如何进行SM4/ECB/NoPadding加密
790浏览 • 1回复 待解决
RSA 加密的具体使用方法
1115浏览 • 1回复 待解决
RSA加密方法在HarmonyOS 的实现
783浏览 • 1回复 待解决
如何使用RSA公钥加密明文数据
1383浏览 • 1回复 待解决
RSA加密,使用自有私钥解密报错
1083浏览 • 1回复 待解决