它用于桌面应用程序,因此只有我需要基本的登录安全性,尽管我使用一个功能来加密密码,但我要使用另一个功能来将密码从UI传递并散列保存到db中,然后返回true或false取决于是否匹配。
我尝试使用官方jasypt网站上的合并版本,虽然可以加密,但不知道如何解密。
//Function to encrypt password
public static String cifrarClave(String clave) {
PooledStringDigester digester = new PooledStringDigester();
digester.setPoolSize(4);
digester.setAlgorithm("SHA-1");
digester.setIterations(50000);
digester.setSaltSizeBytes(32);
//String return is hash that I save into db
return digester.digest(clave);
}
//Function to decrypt password
//clave is old plain that user enter from UI and I want to compare from hash save it into db
public static boolean validarClave(String clave, String hash) {
PooledStringDigester digester = new PooledStringDigester();
digester.setPoolSize(4);
digester.setAlgorithm("SHA-1");
digester.setIterations(50000);
String digest = digester.digest(clave);
//Always fails at that point, I get different hash from compare clave
return digester.matches(digest, hash);
}
我是安全方面的新手,因此我对安全性了解不多,我接受其他建议或替代方案,我只想要一个有效的示例。
matches(message, digest)
当您用两个散列摘要而不是纯文本消息和先前计算的摘要来调用jasypt函数时,您使用的jasypt函数不正确。
在您的中validarClave()
,您首先不必要根据用户的纯文本密码(clave
)计算摘要,然后将其传递给匹配器:
String digest = digester.digest(clave);
//Always fails at that point, I get different hash from compare clave
return digester.matches(digest, hash);
如果您仅将纯文本密码传递给匹配器,则您的方法将正常工作,如下所示:
digester.matches(clave, hash);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句