2017-10-09 66 views
0

我正在开发一个具有用户帐户的组项目。现在我试图找出如何加密,存储和检查密码。我们已经实现了存储密码,但还没有对它们进行加密并存储它们。我正在使用Java库Jasypt,更具体地说我正在使用他们的StandardStringDigester类。使用Java库jasypt摘要加密密码

我的问题是,每当我消化相同的字符串它出来不同。我能找到的准确检查字符串是否与消解字符串匹配的唯一方法是使用Digesters Match方法。此方法需要两个参数,即未加密的密码字符串和已消解的密码字符串。据我所知,然而,验证不应该在客户端进行,服务器端永远不应该看到未经消化的密码。那么,如何消化密码,将其发送到服务器,然后检查它是否与该用户的存储(也是消化的)密码相符?

回答

0

要安全地存储密码,您应该了解如何以及为什么,您可以在论坛上稍微搜索一下,有关此主题的许多资源。

这是比较全面的一个:https://crackstation.net/hashing-security.htm

我的问题是,每当我消化相同的字符串不同的看法出来。

据我所知,StandardStringDigester使用salt来散列输入。这意味着文摘每次都会随机发布。它应该是这样。

那么,如何消化密码,将其发送到服务器,

您发送密码明文到服务器时,TLS(HTTPS)应注意如果完整性和confidentality

然后检查它是否与该用户的存储(也是消化的)密码相符?

我相信你正在寻找比赛方法: matches(String message, String digest)的Jasyp应采取的盐,创建具有相同盐新的消化。如果我错了,请纠正/评论

+0

好的非常感谢,我的问题是,我认为这是不好的做法发送明文到服务器。我想确定,cleartext只是意味着未加密,因为用户输入了正确的密码? – Alex5775

+0

@ Alex5775的确如此。只要您在客户端上散列任何内容,散列/摘要就会成为密码。这就是为什么我们需要https来照顾它​​ – gusto2

+0

再一次感谢了很多,只是另外一个问题:我正在使用Java,Java(特别是套接字)是否自动实现了TLS,还是必须获得另一个库实施这个? – Alex5775