Java 对于消息列表,RSA解密速度较慢

Java 对于消息列表,RSA解密速度较慢,java,encryption,cryptography,public-key-encryption,encryption-symmetric,Java,Encryption,Cryptography,Public Key Encryption,Encryption Symmetric,我有一个聊天应用,我用RSA算法加密聊天信息 聊天时一切都很好。但问题是当应用程序启动时,几个用户的消息列表被加载。这里很慢 用户数量:30-40 每个用户的邮件数:40 我有两个嵌套循环 迭代用户的第一个循环 为每个用户迭代消息的第二个循环 我只是在嵌套循环中解密消息,但加载速度非常慢 为所有用户加载消息几乎需要20-25秒。我也尝试过混合加密(RSA+AES),但速度也很慢,因为我用AES中的新密钥加密每条消息,然后用公钥加密每条密钥 有什么改进的建议吗 AES密钥生成 RSA密钥生成 可以

我有一个聊天应用,我用RSA算法加密聊天信息

聊天时一切都很好。但问题是当应用程序启动时,几个用户的消息列表被加载。这里很慢

  • 用户数量:30-40
  • 每个用户的邮件数:40
  • 我有两个嵌套循环

  • 迭代用户的第一个循环
  • 为每个用户迭代消息的第二个循环
  • 我只是在嵌套循环中解密消息,但加载速度非常慢

    为所有用户加载消息几乎需要20-25秒。我也尝试过混合加密(RSA+AES),但速度也很慢,因为我用AES中的新密钥加密每条消息,然后用公钥加密每条密钥

    有什么改进的建议吗

    AES密钥生成 RSA密钥生成
    可以对多条消息使用相同的对称密钥,也可以使用比RSA更快的算法进行解密,例如ECIES。您还可以查看RSA&AES是否有更快的本机实现。

    很难说问题出在哪里。如果您可以创建一个,请这样做,并在您的问题中张贴代码。只有一个建议:如果您的代码需要很长时间来生成新的随机密钥,那么您可能耗尽了用于在
    /dev/random
    生成随机数的entrpoy池。请尝试改用
    /dev/uradom
    。@r3mainer您不需要随机数生成器进行解密。@MaartenBodewes,但如果您使用新的密钥加密每条消息,您可能会这样做。等待您的建议。@r3mainer谢谢,我刚刚添加了@Maarten Bodewes建议的密钥生成部分。从RSA更改为ECIES可能是个好主意。一个简单的加密-解密基准测试表明,ECIES的加密时间是RSA的2.5倍以上,但对于解密来说,ECIES的时间只是RSA的一半。请再次查看,因为我添加了密钥生成的部分GH,也许你可以从一个能做普通类设计的人那里选择一个例子?那太可怕了。是动词的类名,以及基本上
    writeToFile
    的许多副本。大笑!谢谢,我只是提取了其中的一部分,一点也不,这是一个例子,我得到了它的帮助,因为我不是一个安全程序员,我只是一个前端开发人员。
    SecureRandom rnd = new SecureRandom();
    byte [] key = new byte [16];
    rnd.nextBytes(key);
    this.secretKey = new SecretKeySpec(key, algorithm);
    this.cipher.init(Cipher.ENCRYPT_MODE, this.secretKey);
    this.cipher.doFinal(input)
    
     this.keyGen = KeyPairGenerator.getInstance("RSA");
     this.keyGen.initialize(1024);
     this.pair = this.keyGen.generateKeyPair();
     this.privateKey = this.pair.getPrivate();
     this.publicKey = this.pair.getPublic();