2013-12-17 2 views
0

내 질문은 암호가 이미 Bcrypt로 암호화되었는지 확인하는 방법입니다. 그렇다면 Bcrypt는 아무 것도하지 않고 그냥 암호를 그대로 두십시오. Java (EE), Spring을 사용하고 있습니다.이미 암호화 된 경우 BCrypt 검사가 수행됩니까?

public static String hashPassword(String userPassword) { 
    String bCrypt = null; 
    if (userPassword == null) 
     throw new NullPointerException("Input password for hashing was null."); 
    bCrypt = BCrypt.hashpw(userPassword, BCrypt.gensalt(12)); 
    return bCrypt; 
} 
+0

값은 어떻게 저장됩니까? 저장된 비용과 소금은 어디에 있습니까? –

+0

여기 내 코드는 public static String hashPassword (string userPassword) { \t String bCrypt = null; \t if (userPassword == null) \t throw new NullPointerException ("해싱을위한 입력 암호가 null입니다."); \t bCrypt = BCrypt.hashpw (userPassword, BCrypt.gensalt (12)); \t return bCrypt; }' 해시 할 암호가 이미 해시되지 않았는지 확인하고 싶습니다. –

+0

그래서'jBCrypt'를 사용하고 있습니까? 원래의 질문에 그러한 코드를 삽입 할 수 있습니다. 귀하의 질문을 편집 * 확인 * 정보를 추가 할 수 있습니다. –

답변

1

일반적으로 당신은 또 다른 하나의 암호와 같은 어떤 값을 가질 수있는 문자열을 대체해서는 안된다. 문제는 누군가가 bcrypt 출력 형식과 동일한 형식의 암호를 입력 할 수 있으며 두 암호를 구분할 방법이 없다는 것입니다.

다행히 당신의 bcrypt 함수의 출력이 버전으로 구성 문자열입니다, $ 분리 문자로 둘러싸인 "소금 라운드"소금과 해시. 을 나타냅니다

rs.append("$2"); 
if (minor >= 'a') 
     rs.append(minor); 
rs.append("$"); 
if (rounds < 10) 
     rs.append("0"); 
rs.append(Integer.toString(rounds)); 
rs.append("$"); 
rs.append(encode_base64(saltb, saltb.length)); 
rs.append(encode_base64(hashed, bf_crypt_ciphertext.length * 4 - 1)); 
return rs.toString(); 

내가 아무리 조언을 당신이 당신의 데이터베이스에 열을 추가하는 것입니다 : 그래서 두 가지를 구별하는 가장 좋은 방법은합니다 (jBCrypt 0.3 소스에서) 다음과 같은 출력을 일치하는 정규 표현식을 작성하는 것입니다 행에 사용 된 해시 알고리즘 (있는 경우).

0

bcrypt 알고리즘이 적용되었는지 여부를 확인할 방법이 없습니다. bcrypt를 동시에 닮은 암호를 만들 수 있기 때문입니다. 그러나 트릭을 사용할 수는 있습니다. 암호가 40자를 초과하도록 허용되지 않도록 한 다음 암호가 59 자보다 더 큰지 확인하십시오 (또는 논리에 맞게 조정하십시오). 따라서 암호가 bcrypted되었는지 여부를 추측 할 수 있습니다.

관련 문제