【发布时间】: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