2015-07-27 2 views
0

Хорошо, таким образом у меня есть этот метод хеширования:Java шифрование равно не работает

public static String getEncodedHash(String password, String salt) throws UnsupportedEncodingException { 
    // Returns only the last part of whole encoded password 
    PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest()); 

    gen.init(password.getBytes(), salt.getBytes(), DEFAULT_ITERATIONS); 
    byte[] dk = ((KeyParameter) gen.generateDerivedParameters(256)).getKey(); 

    return Base64.toBase64String(dk); 
} 

Это хэширует прекрасно, насколько я могу судить, и когда она возвращает строку, я сравнить его в строку у меня есть, и они выглядят идентичный, но метод .equals говорит, что нет. Кто-нибудь есть какие-либо идеи вызывают я буквально все из

Это весь LoginHelper класс:

import java.io.UnsupportedEncodingException; 

import org.spongycastle.crypto.digests.SHA256Digest; 
import org.spongycastle.crypto.generators.PKCS5S2ParametersGenerator; 
import org.spongycastle.crypto.params.KeyParameter; 
import org.spongycastle.util.encoders.Base64; 

public class LoginHelper { 
    public static final Integer DEFAULT_ITERATIONS = 20000; 

    public static boolean passwordCorrect(String enteredPassword, String storedPassword) throws UnsupportedEncodingException { 
     String[] parts = storedPassword.split("\\$"); 
     String salt = parts[2]; 
     String storedHash = parts[3]; 
     String calculatedHash = getEncodedHash(enteredPassword, salt); 

     System.out.println(storedHash); 
     System.out.println(calculatedHash); 

     System.out.println(storedHash.length()); 
     System.out.println(calculatedHash.length()); 

     return storedPassword.equals(calculatedHash); 
    } 

    public static String getEncodedHash(String password, String salt) throws UnsupportedEncodingException { 
     // Returns only the last part of whole encoded password 
     PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest()); 

     gen.init(password.getBytes(), salt.getBytes(), DEFAULT_ITERATIONS); 
     byte[] dk = ((KeyParameter) gen.generateDerivedParameters(256)).getKey(); 

     return Base64.toBase64String(dk); 
    } 
} 

я вызываю с:

System.out.println(LoginHelper.passwordCorrect("password","pbkdf2_sha256$20000$wlW7Po1nm1DW$nt9LYWbxwvHIXmyBGUQG7NyPDkrt/2fivN3ws//HzLnks=")); 
+0

Они СМОТРЯТСЯ одинаково, и они идентичны, это две разные вещи. попробуйте использовать WINMerge для сравнения строк. –

+5

можете ли вы опубликовать сравнительную часть, а также какой-то ввод, который вы пробовали? – Karthik

+0

Запишите длину строки и числовое значение каждого символа. На одном из них может быть пространство или подобное. –

ответ

2

Сравнить storedHash в calculatedHash. Вы сравниваете storedPassword, у которого все еще есть префикс "pbkdf2_sha256$20000$".

+0

Я, должно быть, идиот, что работает спасибо :) – user2739518

Смежные вопросы