【问题标题】:Private key encryption method wanted想要的私钥加密方法
【发布时间】:2011-05-15 12:42:27
【问题描述】:

我正在编写一些服务器-客户端软件并且想要一些加密。服务器和客户端共享一个固定长度的私钥。还没有决定我将拥有多长的密钥,但我知道密钥将在 1 到 32 个字符之间。密钥是预先确定的(例如,我可能决定我希望密钥是 abc1234)

我正在使用 Java 进行编程,并且需要尽可能快的算法,因为客户端很可能是移动设备。我不需要任何压缩,但如果加密的字符串不是更大,我会更喜欢。

我显然不是在这里寻找一流的加密,但我的理解是,任何基于密钥的加密都不能在不知道私钥的情况下被破解。

谁能推荐我一种使用共享私钥加密/解密的算法/方法?

【问题讨论】:

  • but it is my understanding that any key based encryption can't be broken without knowledge of the private key anyway. 这不是真的。许多加密算法(过去使用的)可以在不知道私钥的情况下被破解。特别是如果密钥很小。
  • @Ben:出于好奇,为什么该方案必须使用显式共享密钥?为什么不直接使用 TLS/SSL?
  • @SimonJ: Errr,说实话,我真的不知道,出于某种原因,我完全错过了那个球。如果我使用 SSL,就没有机会嗅探数据包或找出正在传输的内容,并且所有加密内容都由 Java 管理 - 对吗?如果是这样,看起来我应该使用 SSL 而不是手动操作。 SSL的缺点是什么;如果有的话?
  • @SimonJ:另外,这是否意味着我必须处理证书之类的事情,并且用户必须生成自己的证书才能运行该软件?
  • TLS/SSL 是正确的最简单方法,因为 Java 负责算法选择、填充、分组密码模式、密钥协商等。您需要一个服务器证书,以便客户端可以确保他们直接与服务器通信,避免中间人攻击;不验证服务器证书可能是 使用 TLS/SSL 的代码中最常见的缺陷。您可以使用证书来识别客户端,但如果您有其他方式(例如用户名/密码),这不是必需的。

标签: java algorithm encryption private-key


【解决方案1】:

据我了解,任何基于密钥的加密都无法在不知道私钥的情况下被破解

这甚至不接近真实。一个糟糕的算法绝对可以在不知道私钥的情况下被破解。

无论如何,如果有共享密钥,请考虑AES

阅读JCE/JCA,因为 Java 可以开箱即用地进行 AES 和其他类型的加密。 比自己滚动要好得多

【讨论】:

  • 在 Blackberry 和 Android 等设备上,AES 的计算成本会很高吗?减少密钥长度是否意味着解密/加密会“更快”? (但显然降低了安全性)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2018-02-27
  • 2011-03-20
  • 2020-12-13
  • 2016-07-17
  • 2019-08-15
  • 2012-04-17
相关资源
最近更新 更多