我应该多次使用相同的密钥吗?

时间:2011-11-20 21:02:21

标签: java security encryption secret-key

我正在开发一个基于Java SE的应用程序(大学内联网),用于计算机安全课程,该课程通过HTTP请求将注册用户的密码(AES ecrypted)发送到服务器。它执行以下步骤:

  1. 用户注册到Intranet应用程序。
  2. 客户端发送包含学生密码的HTTP请求,并使用AES加密。
  3. PHP脚本现在解密AES密文并对其进行哈希处理。
  4. 散列密码存储在数据库中。
  5. 现在从我读到的关于AES的内容来看,我需要一个密钥作为加密过程的一部分。由于服务器脚本需要密钥来解密密码,每次使用相同的密钥是不是一个坏主意?一旦脚本收到密文,它就会使用单向散列函数将其存储在数据库中。

2 个答案:

答案 0 :(得分:3)

如果您真的想使用对称密码

好的,我假设您希望两个实体通过在每个实体上输入相同的密钥进行通信(例如蓝牙连接)。在这种情况下,问题已经被提出,我让你谷歌寻求一些答案,如this

你当然想要的是HTTPS

但显然您只是想在客户端和服务器之间进行安全通信。在这种情况下,您需要使用HTTPS(因为您使用HTTP)。 HTTPS通过握手完成所有这些操作,然后依靠对称密钥算法来确保通信。

如何满足您的要求

在您的情况下,如果登录页面是在HTTPS中提供的:

  • 密码将在客户端发送时事实上加密
  • 它将由服务器自动解密,然后你必须
  • 在PHP中哈希并将其存储到数据库中。

答案 1 :(得分:1)

我同意其他评论 - 如果可能,HTTPS是可行的方式。

然而,要直接回答你的问题,那么是 - 每次使用相同的密钥(在它自己/没有盐)上非常坏主意。如果由于某种原因,HTTPS 是一个选项,那么至少考虑使用salt和/或一次性pad,具体取决于您的实现可能性:

Salt (cryptography) One-time Pad

本文看起来可能有用:

Data Encryption Decryption using AES Algorithm, Key and Salt with Java Cryptography Extension

希望有所帮助。