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

未使用RSA加密加密的大型数据

安奇
2023-03-14

我的问题是:

我的加密代码在64个字符以下运行良好。但如果超过64个字符,我会得到以下错误

javax.crypto.IllegalBlockSizeException: input must be under 64 bytes

加密代码

        cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        encryptedBytes = cipher.doFinal(message.getBytes(StandardCharsets.UTF_8));
        rsaEncrypted= Base64.encodeToString(encryptedBytes, Base64.NO_WRAP);

密钥生成代码

      KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
      keyGen.initialize(512);
      KeyPair keypair = keyGen.genKeyPair();
      PublicKey pub = keypair.getPublic();
      byte[] pubs = pub.getEncoded();

我的问题是:

可以用512位密钥加密大文本吗?我的密码有错吗?

注意:如果有人想要完整的代码,我会稍后更新。

共有2个答案

谭嘉容
2023-03-14

这里直接引用了弗格森、施奈尔和科诺的开创性著作《密码工程》,

加密消息是RSA的典型应用,但在实践中几乎从未使用过。原因很简单:可以使用RSA加密的消息的大小受到n大小的限制。在现实系统中,你甚至不能使用所有的比特,因为编码函数有开销。这种有限的消息大小对大多数应用来说太不切实际了,而且因为RSA操作在计算方面相当昂贵,你不想把消息分成更小的块,并用单独的RSA操作加密它们中的每一个。

换句话说,对于n位RSA密钥,RSA可以加密的最大数据长度(以字节为单位)为

Floor(n/8) - 11 

其中11个字节用于填充

因此,对于512位的密钥大小,可以加密的最大数据长度是,

512/8 - 11 = 53 bytes

还是从密码工程这本书,

几乎所有地方都使用的解决方案是选择一个随机密钥K,并用RSA密钥加密K。然后使用分组密码或流密码使用密钥K对实际消息m进行加密。因此,不是发送像ERSA(m)这样的东西,而是发送ERSA(K),EK(m)。

基本上,它告诉你做以下事情来克服RSA的局限性,

  1. 使用AES等算法生成密钥,K
  2. 使用新生成的密钥对明文m进行加密,以获得密文,例如EK(m)
  3. 用RSA公钥ERSA(K)加密密钥
  4. 向客户端发送密码文本EK(m)和加密密钥ERSA(K)
  5. 客户端可以使用RSA私钥解密ERSA(K)以获得K
  6. 然后,客户端用K对密文EK(m)进行解密,得到m
越飞语
2023-03-14

一个RSA块中可以加密的字节数由使用的密钥大小减去填充所占用的任何字节决定。

通常,RSA不适合批量加密,因为它的速度非常慢。如果可以的话,可以使用AES之类的对称加密算法。如果您确实需要RSA的两个密钥,请使用一种混合方法,即使用随机对称密钥加密数据,然后使用RSA密钥加密该密钥。

使用对称加密的另一个好处是,这些库自动支持批量加密,而RSA则不支持批量加密。

 类似资料:
  • 文件解密后,输出包含一些不相关的额外值。为什么结果中有额外的数据?

  • 我正在使用OpenSSL RSA API用服务器的公钥加密数据。 我使用的是,所以RSA应该可以轻松地用256字节的公钥加密255字节。但我收到了: 我改变dl(data_lenght)到256(只有1),我得到了这个: 我知道RSA可以用256个密钥编码255个字节。有什么问题吗?

  • 我使用的是Web加密,更具体地说,这些示例是:https://github.com/diafygi/webcrypto-examples/#rsa-oaep 更新

  • 本文向大家介绍java使用RSA加密方式实现数据加密解密的代码,包括了java使用RSA加密方式实现数据加密解密的代码的使用技巧和注意事项,需要的朋友参考一下 RSA的应用 RSA是一种非对称加密算法。现在,很多登陆表单的密码的都采用RSA加密,例如京东中的登陆使用公钥对密码进行加密 java使用RSA加密方式实现数据加密解密,需要首先产生私钥和公钥 测试代码 RSA工具类的实现 总结 以上所述是

  • 在本章中,我们将重点介绍RSA密码加密的不同实现及其所涉及的功能。 您可以引用或包含此python文件以实现RSA密码算法实现。 加密算法包含的模块如下 - from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from Crypto.Signature import PKCS1_v1_5 from Crypto

  • 代码https://play.golang.org/p/CUEqjsJq5c 错误: 文件大小811字节(用于测试加密自源文件)。我想加密一些更大的文件,1。。500 mb。我可以用RSA来做吗?或者需要使用其他方法吗?