首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用非对称加密时的IllegalBlockSize异常(公钥Enc)

使用非对称加密时的IllegalBlockSize异常(公钥Enc)
EN

Stack Overflow用户
提问于 2018-10-21 19:48:42
回答 1查看 112关注 0票数 1

我用Java设置了公钥和私钥加密,并分发了这两个用户的公钥(通信是在两个用户之间进行的)。现在我希望用户交换一个对称密钥。我该做的是:

  1. 用户A生成密钥。
  2. 用户A用他的私钥加密密钥,然后用B的公钥加密它。
  3. 用户A发送加密密钥。
  4. 用户B接收加密密钥。
  5. 用户B用他的私钥解密密钥,然后用A的公钥解密。

我的用户A生成密钥的代码:

代码语言:javascript
复制
1. KeyGenerator keyGenerator = KeyGenerator.getInstance(ENCMETHOD);
2. SecureRandom secureRandom = new SecureRandom();
3. int keyBitSize = 128;
4. keyGenerator.init(keyBitSize, secureRandom);
5. secretKey = keyGenerator.generateKey();
6. encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());

// encrypt with public key of B and then my private key
7. String encryptedMessage = encodedKey;
8. encryptedMessage = ac.encryptText
               (
                        ac.encryptText(encryptedMessage, otherUserPublickey),
                        privateKey
                );

第8行引发以下错误:

代码语言:javascript
复制
javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
    at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:344)
    at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
    at javax.crypto.Cipher.doFinal(Cipher.java:2165)
    at driver.AsymmetricCryptography.encryptText(AsymmetricCryptography.java:73) // please refer to the code section below for this method
    at driver.ClientOne.main(ClientOne.java:158) // this is line 8 in the above code

方法AsymmetricCryptography.encryptText(String message,PrivateKey键):

代码语言:javascript
复制
public String encryptText(String msg, PrivateKey key)
        throws
        UnsupportedEncodingException, IllegalBlockSizeException,
        BadPaddingException, InvalidKeyException {
        this.cipher.init(Cipher.ENCRYPT_MODE, key);
        return Base64.encodeBase64String(cipher.doFinal(msg.getBytes("UTF-8")));
}

// this.cipher = Cipher.getInstance("RSA");

任何帮助都是非常感谢的。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-10-21 21:49:35

看起来你已经超过了你可以用RSA加密的数据量(参见这里的https://security.stackexchange.com/questions/44702/whats-the-limit-on-the-size-of-the-data-that-public-key-cryptos-can-handle),它本质上就是模数大小,可能是由Base 64编码造成的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52919233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档