簡體   English   中英

使用Jasypt加密和解密密碼

[英]Encrypt & Decrypt password using Jasypt

它用於桌面應用程序,因此只有我需要基本的登錄安全性,盡管我要使用一個函數來加密密碼,但是我要使用另一個函數來從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);
}

我是安全方面的新手,因此我對安全性了解不多,我接受其他建議或替代方案,我只想要一個有效的示例。

當您使用兩個哈希摘要而不是純文本消息和先前計算的摘要來調用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的javadocs代碼示例上提供了更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM