【问题标题】:RSA decryption is slow for list of messages消息列表的 RSA 解密速度很慢
【发布时间】:2021-03-04 06:49:43
【问题描述】:

我有一个聊天应用,我用 RSA 算法加密了聊天消息。

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

  1. 用户数:30 - 40
  2. 每个用户的消息数:40

我有两个嵌套循环

  1. 迭代用户的第一个循环
  2. 为每个用户迭代消息的第二个循环

我只是在嵌套循环中解密消息,但加载速度很慢。

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

有什么改进建议吗?

AES 密钥生成

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)

RSA 密钥生成

 this.keyGen = KeyPairGenerator.getInstance("RSA");
 this.keyGen.initialize(1024);
 this.pair = this.keyGen.generateKeyPair();
 this.privateKey = this.pair.getPrivate();
 this.publicKey = this.pair.getPublic();

【问题讨论】:

  • 很难判断可能是什么问题。如果您可以创建minimal reproducible example,请这样做并在您的问题中发布代码。只有一个建议:如果您的代码需要很长时间才能生成新的随机密钥,那么您可能用尽了/dev/random 处用于生成随机数的熵池。尝试改用/dev/urandom
  • @r3mainer 你不需要随机数生成器来解密。
  • @MaartenBodewes 但是,如果您使用新密钥加密每条消息,大概会这样做。等待您的建议。
  • @r3mainer 谢谢,我刚刚添加了密钥生成的部分
  • 正如@Maarten Bodewes 所建议的,从 RSA 更改为 ECIES 可能是个好主意。一个简单的加密-解密基准表明,ECIES 的加密时间比 RSA 高 2.5 倍以上,但对于 解密,ECIES 的时间仅为 一半与 RSA 相比的时间

标签: java encryption cryptography public-key-encryption encryption-symmetric


【解决方案1】:

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

【讨论】:

  • 请再看一遍,因为我已经添加了密钥生成的部分
  • 呃,也许您可​​以从可以进行正常类设计的人那里选择一个示例?这太可怕了。类名是动词,基本上是writeToFile 的许多副本。哎呀!
  • 谢谢,我只是提取了其中的一部分,根本没有提取出来,这是我得到帮助的一个例子,因为我不是安全程序员,我只是一个前端开发人员。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
相关资源
最近更新 更多