2

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

  1. 用户注册到 Intranet 应用程序。
  2. 客户端发送一个包含学生密码的 HTTP 请求,使用 AES 加密。
  3. PHP 脚本现在解密 AES 密文并对其进行哈希处理。
  4. 哈希密码存储在数据库中。

现在,根据我对 AES 的了解,我需要一个密钥作为加密过程的一部分。由于服务器脚本需要密钥来解密密码,所以每次使用相同的密钥是不是一个坏主意?一旦脚本接收到密文,它将使用单向哈希函数将其存储在数据库中。

4

2 回答 2

3

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

好的,我假设您希望两个实体通过在每个实体上输入相同的密钥(例如蓝牙连接)进行通信。在那种情况下,这个问题已经被问到了,我让你用谷歌搜索这样的答案

你当然想要的是 HTTPS

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

它如何满足您的要求

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

  • 密码在发送时将被客户端事实上加密
  • 它会被服务器自动解密然后你必须
  • 在 PHP 中对其进行哈希处理并将其存储到数据库中。
于 2011-11-20T21:16:20.117 回答
1

我同意其他评论——如果可能的话,HTTPS 是最好的选择。

但是,要直接回答您的问题,那么是的 - 每次使用相同的密钥(单独/不加盐)是一个非常糟糕的主意。如果由于某种原因,HTTPS不是一个选项,那么至少考虑使用 salt 和/或 one-time-pad,具体取决于您的实现可能性:

盐(密码学) 一次性垫

这篇文章看起来可能有用:

使用 AES 算法、密钥和 Salt 以及 Java 加密扩展的数据加密解密

希望有帮助。

于 2011-11-20T22:41:02.307 回答