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)
  }
}
应用安全
HarmonyOS NEXT
2024-05-15 16:32:20
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Caesari

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

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


已于2024-5-16 12:24:29修改
分享
微博
QQ
微信
回复
2024-05-16 12:24:03
相关问题
如何通过uuid生成、md5、RSA、AES、 DES
176浏览 • 1回复 待解决
安全加密算法代码参考
218浏览 • 1回复 待解决
多种加密方式实现加解密
128浏览 • 1回复 待解决
PolarDB TDE加密是否支持密钥轮转?
1277浏览 • 1回复 待解决
为什么不能模拟加密门禁卡
4999浏览 • 1回复 待解决
加密算法(crypto-js)Arkts转化代码
203浏览 • 1回复 待解决
dlopen打开.so文件并使用md5加密
51浏览 • 1回复 待解决
鸿蒙纯净模式无法退出
9571浏览 • 1回复 待解决
DevEco没有Design模式
4109浏览 • 1回复 待解决
tp5 如何对post传参进行加密
529浏览 • 1回复 待解决
实现一次非对称RSA非对称加解密
103浏览 • 1回复 待解决
关系型数据库rdb中如何进行加密
279浏览 • 1回复 待解决
是否有支持非对称加密的三方库?
224浏览 • 1回复 待解决
使用specified启动模式定制入口
63浏览 • 0回复 待解决
setRingerMode设置静音模式报错
4211浏览 • 1回复 待解决
应用如何适配深色模式
231浏览 • 1回复 待解决
stagemode 模式下如何获取version信息?
567浏览 • 0回复 待解决
相机有没有HDR模式的采集
245浏览 • 1回复 待解决