Java 安卓错误 "too much data for RSA block"

标签 java android encryption rsa

<分区>

A 在我的 Android 项目中出现错误(RSA 加密/解密)。 加密通过 OK,但是当我尝试解密加密文本时,出现错误:“RSA block 的数据过多”

如何解决这个问题?

代码:

public String Decrypt(String text) throws Exception
{
    try{
        Log.i("Crypto.java:Decrypt", text);
        RSAPrivateKey privateKey = (RSAPrivateKey)kp.getPrivate();
        Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] cipherData = cipher.doFinal(text.getBytes());// <----ERROR: too much data for RSA block
            byte[] decryptedBytes = cipher.doFinal(cipherData);
            String decrypted = new String(decryptedBytes);

            Log.i("Decrypted", decrypted);

        return decrypted;
    }catch(Exception e){
        System.out.println(e.getMessage());
    }
    return null;
}

最佳答案

你的问题是,如果你想使用文本表示(String 在你的例)。

在这个网站上查一下base 64编码,应该有很多资料。加密后编码,解密前解码。您还应该为明文指定特定的字符编码。

最后,您可能应该使用对称密码加密,并使用 RSA 加密对称 key 。否则,您可能会用完 RSA 计算中的空间,因为公钥无法加密大于其模数( key 大小)的数据。

关于Java 安卓错误 "too much data for RSA block",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15024738/

相关文章:

android - android 中的 Branch.io 深层链接无论如何都会打开 Play 商店

java - 为每个新标记添加标题

java - 为什么 foo(1,2,3) 没有作为 Integer[] 传递给可变参数方法 foo(Object...)

java - Subclipse 问题 : running . java 文件作为 Java 应用程序

java - Spring boot-将服务注入(inject)doFiler

java - 使用java套接字实现简单的对称加密

android - Firebase + 权限

android - 从我的移动设备读取android中的txt文件

c - 此代码是否有资格成为 block 密码

java - signature.verify() 总是返回 False