2017-05-10 1 views
1

와 문자열 :Comparate SHA-256 문장 나는 두 문자열을 비교하려면

  • "password"
  • "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8" (동일하지만, SHA-256에서).

일반적으로는 기능 isPassValid() 나에게 true를 반환합니다,하지만 난 false 응답이있다. 왜 ?

public static boolean isPassValid(){ 
    String hash = bin2hex(getHash("password")); 
    return hash.equals("5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"); 
} 

private static byte[] getHash(String password) { 
    MessageDigest digest=null; 
    try { 
     digest = MessageDigest.getInstance("SHA-256"); 
    } catch (NoSuchAlgorithmException e1) { 
     e1.printStackTrace(); 
    } 
    assert digest != null; 
    digest.reset(); 
    return digest.digest(password.getBytes()); 
} 

private static String bin2hex(byte[] data) { 
    return String.format("%0" + (data.length*2) + "X", new BigInteger(1, data)); 
} 

답변

5

귀하의 행 :

return String.format("%0" + (data.length*2) + "X", new BigInteger(1, data)); 

는 당신이 비교하고있는 문자열을 소문자 진수 문자가 대문자 진수 문자열을 반환

이 내 코드입니다. "X"를 "x"로 변경하거나 equalsIgnoreCase()와 비교하십시오.

+0

덕분에 지금 사용하고 있습니다 **. toUpperCase() ** –

+0

좋은 캐치 .. :) –

관련 문제