决定加密算法

时间:2011-01-27 11:34:18

标签: java encryption

我的要求:需要在服务器和客户端(J2EE)之间交换一些密钥。

Key只是一段文本,可以是一个数字,字符串的大小可能不超过30个字符。

由于密钥是敏感的,我正在考虑对其进行加密,并在收到密钥时对其进行解密。

Q1)传统代码使用'PBEWithMD5AndDES'。我想知道它是否合适。

在表现方面,可能更好吗?

更新:

  • 客户端没有逻辑。服务器将加密的字符串发送到客户端,客户端将其返回。就像jsessionid一样。

  • 密钥不像信用卡号那么敏感。但它需要以不可读的格式进行交换,优于普通编码技术

更新2:

  • 这是一个场景。我们向客户发送一封电子邮件,其中包含来自警报的“取消订阅”。单击该链接应该在不提示登录的情况下停用警报。因此,我加密了他的userID并将其包含在unsubscribe链接中。在服务器端,我解密并停用他/她的警报。 因此,黑客传递的参数不起作用。

4 个答案:

答案 0 :(得分:1)

我可能只是让服务器和客户端生成私钥和公钥,然后加密密钥以与接收方的公钥交换。

或者只使用强大的东西和对称密钥,如AES256。

我会避免在新系统中使用DES,它已经很老了,并且已被证明是易碎的。

就实际实施而言,我不完全确定问题中有足够的细节。

答案 1 :(得分:0)

AES256将是一个不错的选择..坚实并期待未来的证明。但这将是表现沉重。另一种选择是RC4。

答案 2 :(得分:0)

如果客户端没有使用它作为一种会话令牌,那你为什么要加密呢?

除秘密外,您还可以使用会话中保留的哈希值或随机值。

答案 3 :(得分:0)

我建议 AES-256 。它目前尚不稳定,成为强对称加密的标准。

它也得到了Java的无缝支持(参见 java.security javax.crypto )。此外,AES支持许多免费软件工具,您可以在Unix上使用OpenSSL AES256在性能方面很重要,但是当您加密30个字符串/文档时,这不会成为问题。 (显然,除非有数百万,否则。)

您还需要决定其他一些加密规范,例如块模式和填充。 在这里我的建议 - 这就是我在被要求用Java进行可靠加密时所使用的:

  • 加密算法: AES 使用256位密钥
  • 阻止模式: CBC (密码块链接)
  • 填充: PKCS5Padding