【问题标题】:Encrypt & Decrypt password using Jasypt使用 Jasypt 加密和解密密码
【发布时间】:2015-01-31 19:05:36
【问题描述】:

这是一个桌面应用程序,所以我只想要基本的登录安全性,我虽然使用一个函数来加密密码,另一个我将密码从 UI 和哈希保存到 db 并返回 true o 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);
}

我是安全新手,所以我对安全了解不多,我接受其他建议或替代方案,我只想要一个工作示例。

【问题讨论】:

  • 谢谢jaja,我认为失败是因为盐改变了每个关系,我想用盐作为盐,例如用户名的前两个字母,所以我总是可以知道盐,我不需要分开保存。这里的问题是我不知道如何编码,我读了这篇文章(jasypt.org/howtoencryptuserpasswords.html)但他们没有在代码中给出任何示例。
  • 不需要解密密码,只需对用户输入的内容进行哈希处理,然后使用数据库中的哈希值进行检查。

标签: java security passwords jasypt


【解决方案1】:

当您使用两个散列摘要而不是明文消息和先前计算的摘要调用 jasypt 函数时,您错误地使用了 jasypt 的 matches(message, digest) 函数。

在您的 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);

更多信息请访问 jasypt 的 javadocscode examples

【讨论】:

    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 2021-07-13
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多