我正在编写客户端服务器应用程序。客户端和服务器之间的通信使用Java RMI。我已经设置了RMI以便它使用SSLSockets
,因此通信是安全的。但是现在我希望我的客户输入密码,密码需要发送到服务器并以安全的方式存储在那里。
问题1:发送时是否需要加密此密码,或者SSLSockets
是否足够使用?
问题2:我正考虑在服务器上使用哈希函数(如SHA1
)对其进行加密,然后将其与存储值进行比较。
问题3:如何以安全的方式存储这些密码?我想在本地存储它们。我应该创建数据库并存储加密的密码吗?对此有哪些常见做法?
答案 0 :(得分:1)
问题1:
这取决于安全要求。对于大多数情况来说还不够。
问题2:
在这里,您可以找到一种计算字符串SHA1
的方法:Java String to SHA1
问题3:
将密码存储在数据库中的某个特定表中是一种常见的做法。我建议使用散列密码和所谓的salt,因此协议是:
假设您有sha1()
方法执行哈希计算:
String salt = generateLongRandomString();
String hashToStore = sha1(sha1(password) + salt);
username
或类似内容,可能email
; hashToStore
; salt
; 好的,下一步是身份验证。