安全的传输和存储数据的方式

时间:2014-05-06 18:36:55

标签: java security encryption

我正在编写客户端服务器应用程序。客户端和服务器之间的通信使用Java RMI。我已经设置了RMI以便它使用SSLSockets,因此通信是安全的。但是现在我希望我的客户输入密码,密码需要发送到服务器并以安全的方式存储在那里。

  • 问题1:发送时是否需要加密此密码,或者SSLSockets是否足够使用?

  • 问题2:我正考虑在服务器上使用哈希函数(如SHA1)对其进行加密,然后将其与存储值进行比较。

  • 问题3:如何以安全的方式存储这些密码?我想在本地存储它们。我应该创建数据库并存储加密的密码吗?对此有哪些常见做法?

1 个答案:

答案 0 :(得分:1)

问题1:

这取决于安全要求。对于大多数情况来说还不够。

问题2:

在这里,您可以找到一种计算字符串SHA1的方法:Java String to SHA1

问题3:

将密码存储在数据库中的某个特定表中是一种常见的做法。我建议使用散列密码和所谓的salt,因此协议是:

  • 用户正在注册或更改密码并向您发送密码。
  • 我们生成一些looooooooong随机字符串,我们将用作盐。
  • 现在,我们需要计算数据库中的值。

假设您有sha1()方法执行哈希计算:

String salt = generateLongRandomString();
String hashToStore = sha1(sha1(password) + salt);
  • 现在,我们需要在数据库中为每个用户存储至少三个字段:username或类似内容,可能email; hashToStore; salt;

好的,下一步是身份验证。

  • 用户想要验证并向您发送密码。
  • 您为此用户检索存储的哈希和salt,通过用户名或电子邮件进行搜索;
  • 您使用我上面编写的公式重新计算哈希值,并将其与存储值进行比较。如果匹配,则用户是真实的,您可以告知他/她。