当前位置: 首页 > 知识库问答 >
问题:

使用RSA时,提供数据的XML字符串加密不得超过245字节

洪胜涝
2023-03-14

我创建了以下方法

public static PublicKey readPublicKey(String filename) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {

    PublicKey key = null;
    CertificateFactory fact;

    try {

        // MBFS certificate to be used
        FileInputStream is = new FileInputStream(filename);
        fact = CertificateFactory.getInstance("X.509");
        System.out.println(is.toString());
        X509Certificate cer = (X509Certificate) fact.generateCertificate(is);
        key = cer.getPublicKey();
        System.out.println(key.getAlgorithm());

    } catch (CertificateException e) {

        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return key;
}

用于加密

public static byte[] encrypt(PublicKey key, byte[] plaintext) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    return cipher.doFinal(plaintext);
} 

我有很长的xml字符串,使用这两种方法如下

byte[] message = xmlMessage.getBytes();

byte[] secret = encrypt(publicKey, message);

但它给了我数据不得超过256字节时使用rsa

证书被客户端切分,表示签名算法sha256RS。

共有1个答案

贺宏逸
2023-03-14

通常,您会使用对称密码加密文档(使用随机密钥),然后用RSA加密密钥。这不仅克服了长度问题,而且速度快得多。

 类似资料:
  • 我必须为一个项目构建一个简单的授权服务器。服务器必须分发AES密钥,以允许其客户端相互通信。 使用RSA加密AES密钥时,我遇到了以下错误:“javax.crypto.IllegalBlockSizeException:数据长度不得超过117字节”。这很奇怪,因为我的AES密钥的长度是128位=16字节。 以下是生成错误的代码: 有人知道16字节长的AES密钥的加密是如何让我遇到这种错误的,以及如

  • 问题内容: 我正在使用rsa密钥对要发送到服务器的长字符串进行加密(将使用服务器的公钥和我的私钥对它进行加密),但是它抛出一个异常,就像 我觉得到目前为止我还不了解rsa的工作原理一样(使用内置库是造成这种情况的原因)。 可以请一个人解释为什么抛出此异常。根本不可能发送加密的长字符串吗? 问题答案: RSA算法只能加密具有以字节为单位的RSA密钥长度的最大字节长度除以8减去11的填充字节的数据,即

  • 我使用rsa密钥加密一个长字符串,并将它发送到我的服务器(将使用服务器的公钥和私钥加密它),但它会引发类似我觉得到目前为止我还没有正确理解rsa的工作方式(使用内置库是造成这种情况的原因)。 有人能解释为什么会引发此异常吗?难道根本不可能发送加密的长字符串吗?

  • 我有一个RSA公钥证书。我可以使用具有。PEM扩展名或仅将其用作具有以下格式的字符串: 启动RSA公共密钥 {KEY} -----结束RSA公钥----- 我试图使用此密钥向服务器发送加密的JSON。我尝试了许多其他相关堆栈溢出问题的解决方案,但没有一个答案不适合我。这个答案似乎有道理https://stackoverflow.com/a/43534042,但有些东西不能正常工作,可能是因为X50

  • 问题内容: 我正在尝试实施PKI。我想在Java中使用RSA而不使用弹性城堡来加密大字符串。我得到的问题是数据不得超过117个字节。我尝试寻找失败的解决方案。我是这种加密的新手。请提供一个大字符串作为示例来帮助我并进行解释。 问题答案: 一次不能使用超过128个字节的RSA加密解密。您必须拆分数据并在循环中进行处理,几乎可以随时将字节写入String / Array。如果您唯一的问题是数据大小,那