当前位置: 首页 > 面试题库 >

ArrayIndexOutOfBoundsException:RSA块的数据过多

樊琦
2023-03-14
问题内容

我的Android应用程序存在一些问题。我正在尝试与RSA加密/解密相关的应用程序。这是我的问题:

我可以清楚地加密短句,但是当我尝试将此消息解密为原始文本时,我给出一个错误(“
RSA块数据太多”)。另外,如果我想加密一个长句子,我也会遇到同样的错误。

但是我什么都不懂,这些解决方案太复杂了。我该如何解决这个问题,谁能给我一个更简单的解决方案?谢谢。

EDİT:这些是我用于该项目的代码块。

public String RSAEncrypt(String plain) throws NoSuchAlgorithmException, NoSuchPaddingException,InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException, UnsupportedEncodingException {

    publicKey = getPublicKey();
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] cipherData = cipher.doFinal(plain.getBytes());
    return Base64.encodeToString(cipherData, Base64.DEFAULT);
}

public String RSADecrypt(byte[] encryptedBytes) throws NoSuchAlgorithmException, NoSuchPaddingException,InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException, UnsupportedEncodingException {

    privateKey = getPrivateKey();
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);      
    byte[] cipherData = cipher.doFinal(encryptedBytes);
    return Base64.encodeToString(cipherData, Base64.DEFAULT);
}

问题答案:

RSA只能加密比密钥对的模数短几个字节的消息。多余的字节用于填充,确切的数字取决于您使用的填充方案。

RSA用于密钥传输,而不用于数据加密。如果有很长的消息,请使用随机密钥使用AES对其进行加密。然后,使用邮件接收者的公钥用RSA加密AES密钥。您应该使用Cipher类的wrap()unwrap()方法

这就是PGP,S / MIME,TLS(大致)和任何其他正确设计的RSA加密方案的工作方式。



 类似资料:
  • 问题内容: 谈论 我试图使用加密数据,但出现异常: 看起来与“ NoPadding”有关,因此,阅读有关填充的信息,看起来CBC是在此处使用的最佳方法。 我在Google上找到了有关“ RSA / CBC / PKCS#7”的东西,这是什么“ PKCS#7”?以及为什么它没有在sun的标准算法名称中列出? 更新: 我想知道,如果是填充问题,为什么这个示例运行得很好? 更新2: 我意识到即使我只使用

  • 我是区块链新手。突然我得到一个问题,我们是否可以通过区块号从以太坊区块链访问以前的区块数据。 例如,我创建了一个block1,block2。 block1有数据“apple”,之后我将数据更改为“banana”,因此创建了新的block 2。我知道如果我们调用get data函数,那么它将给出输出香蕉,但是如果我想通过块号as 1访问block1中的数据,如何访问它? 有任何方法可以访问以前块的数

  • 获得数据表数据接口,支持对内置表自定义字段的获取与修改 查询数据 接口 GET https://cloud.minapp.com/userve/v1/table/:table_id/record/ 其中 :table_id 需替换为你的数据表 ID 参数说明 Content-Type: application/json 参数 类型 必填 说明 where String N 查询语句,参数值应经过

  • 获得数据表数据接口,支持对内置表自定义字段的获取与修改 查询数据 接口 GET https://cloud.minapp.com/oserve/v1/table/:table_id/record/ 其中 :table_id 需替换为你的数据表 ID 参数说明 Content-Type: application/json 参数 类型 必填 说明 where String N 查询语句,参数值应经过

  • 创建数据表 接口 POST https://cloud.minapp.com/userve/v1/table/ 提交参数 参数 类型 必填 说明 name String(32) 是 数据表名(以字母开头,字母、数字、下划线的组合) schema Object 是 数据表字段的元信息 row_read_perm String Array 是 数据表行的读权限 row_write_perm Strin