2015-01-31 11 views
0

이것은 데스크톱 응용 프로그램 용이므로 기본 로그인 보안 만 원하지만 암호를 암호화하는 데 하나의 기능을 사용하고 암호를 전달하고 UI에서 패스워드를 전달하고 db에 해시를 저장하고 사실을 반환합니다. false는 일치하는지 여부에 따라 다릅니다.Jasypt를 사용하여 암호를 암호화하고 암호 해독

공식 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); 
} 

저는 보안에 대한 지식이별로 없기 때문에 다른 제안이나 대안을 받아들입니다.

+0

행운을 빌어 요! –

+0

감사합니다 jaja, 나는 소금이 각 tiem을 변경하기 때문에 실패한 것 같아요. 예를 들어 사용자 이름의 처음 두 글자에 소금을 사용하고 싶습니다. 그래서 항상 소금을 알 수 있고 따로 저장할 필요가 없습니다. 문제는 여기서 인코딩하는 방법을 모르겠다는 것입니다.이 기사 (http://www.jasypt.org/howtoencryptuserpasswords.html)를 읽었지 만 코드에서 예제를 제공하지 않습니다. – Marcos

+2

** 암호를 해독하기 위해 ** 필요하지 않습니다. 사용자가 입력 한 내용을 해시하고 데이터베이스의 암호로 해시를 확인하십시오. –

답변

0

jearspt의 matches(message, digest) 함수를 일반 텍스트 메시지 및 이전에 계산 된 다이제스트 대신 두 개의 해시 다이제스트로 호출 할 때 함수를 잘못 사용하고 있습니다. 당신은 단순히 일반 텍스트를 전달하는 경우

String digest = digester.digest(clave); 
//Always fails at that point, I get different hash from compare clave 
return digester.matches(digest, hash); 

귀하의 방법이 제대로 작동합니다 : 당신의 validarClave()에서

먼저 불필요 그런 다음 정규에 전달하는 사용자의 일반 텍스트 암호 (clave)에서 다이제스트를 계산하고 매처에 암호로는 다음과 같습니다

digester.matches(clave, hash); 

더 많은 정보는 jasypt의 javadocscode examples에서 확인할 수있다.