我正在开发一个基于Java SE的应用程序(大学内联网),用于计算机安全课程,该课程通过HTTP请求将注册用户的密码(AES ecrypted)发送到服务器。它执行以下步骤:
现在从我读到的关于AES的内容来看,我需要一个密钥作为加密过程的一部分。由于服务器脚本需要密钥来解密密码,每次使用相同的密钥是不是一个坏主意?一旦脚本收到密文,它就会使用单向散列函数将其存储在数据库中。
答案 0 :(得分:3)
如果您真的想使用对称密码
好的,我假设您希望两个实体通过在每个实体上输入相同的密钥进行通信(例如蓝牙连接)。在这种情况下,问题已经被提出,我让你谷歌寻求一些答案,如this
你当然想要的是HTTPS
但显然您只是想在客户端和服务器之间进行安全通信。在这种情况下,您需要使用HTTPS(因为您使用HTTP)。 HTTPS通过握手完成所有这些操作,然后依靠对称密钥算法来确保通信。
如何满足您的要求
在您的情况下,如果登录页面是在HTTPS中提供的:
答案 1 :(得分:1)
我同意其他评论 - 如果可能,HTTPS是可行的方式。
然而,要直接回答你的问题,那么是 - 每次使用相同的密钥(在它自己/没有盐)上非常坏主意。如果由于某种原因,HTTPS 不是一个选项,那么至少考虑使用salt和/或一次性pad,具体取决于您的实现可能性:
Salt (cryptography) One-time Pad
本文看起来可能有用:
Data Encryption Decryption using AES Algorithm, Key and Salt with Java Cryptography Extension
希望有所帮助。