Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该多次使用相同的密钥吗?_Java_Security_Encryption_Secret Key - Fatal编程技术网

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

Java 我应该多次使用相同的密钥吗?,java,security,encryption,secret-key,Java,Security,Encryption,Secret Key,我正在为一门计算机安全课程开发一个基于JavaSE的应用程序(大学内部网),它通过HTTP请求将注册用户的密码(AES加密)发送到服务器。它执行以下步骤: 用户注册到Intranet应用程序 客户端发送一个包含学生密码的HTTP请求,并用AES加密 PHP脚本现在解密AES密文并对其进行散列 哈希密码存储在数据库中 现在从我所读到的AES,我需要一个密钥作为加密过程的一部分。由于服务器脚本需要密钥来解密密码,所以每次使用相同的密钥会是一个坏主意吗?一旦脚本接收到密文,它将使用单向散列函数将其存储

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

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

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

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

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

    您当然想要的是HTTPS

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

    如何满足您的要求

    在您的情况下,如果登录页面使用HTTPS:

    • 发送密码时,客户端将对密码进行事实上的加密
    • 它将由服务器自动解密,然后您必须
    • 在PHP中对其进行散列并将其存储到数据库中

    我同意其他评论-如果可能,HTTPS是一种方式

    但是,直接回答您的问题,然后回答是-每次使用相同的密钥(单独使用/不含盐)是一个非常糟糕的主意。如果由于某种原因,HTTPS是<强>不是< /强>选项,那么至少考虑使用盐和/或一次PAD,这取决于您的实现可能性:

    这篇文章看起来很有用:


    希望有帮助

    用例还不清楚。也许您可以一步一步地描述您的需求(例如,用户是否发送加密密码或纯文本密码)?谢谢,那么在第2步-浏览器中,谁加密密码,例如JavaScript?如果是,浏览器如何知道AES加密所需的密钥(系统密码)?Java应用程序将使用AES加密密码,Java应用程序只知道密钥。现在的问题是PHP脚本需要破译它,但需要密钥。对Java应用程序和PHP后端脚本使用相同的密钥是个坏主意吗?