내 구현의 Salting 및 SHA-512 해싱 암호가 정확하고 안전합니까?내 Salting 및 SHA-512 해싱 암호의 구현이 정확하고 안전합니까?
소금에 절인 암호에서 알고리즘을 두 번 반복해야한다는 것을 알고 있습니다. 그 외에도 내가 보안을 강화하기 위해 구현해야하는 것은 무엇입니까? 아니면 이것으로 충분합니까?
public static String[] SHA512(String password)
{
//Generates the salt
SecureRandom saltRandomizer = new SecureRandom();
byte[] salt = new byte[64]; //The same size as the output of SHA-512 (512 bits = 64 bytes)
saltRandomizer.nextBytes(salt);
String encodedSalt = Base64.encodeToString(salt, Base64.DEFAULT);
//Prepends the salt to the password
String saltedPassword = encodedSalt + password;
//Hashed the salted password using SHA-512
MessageDigest digester;
byte[] digest = null;
try {
digester = MessageDigest.getInstance("SHA-512");
digester.reset();
digester.update(saltedPassword.getBytes());
digest = digester.digest();
} catch (NoSuchAlgorithmException e) {
System.out.println("No such algorithm");
e.printStackTrace();
}
String[] passwordPlusSalt = new String[2];
passwordPlusSalt[0] = Base64.encodeToString(digest, Base64.DEFAULT);
passwordPlusSalt[1] = encodedSalt;
return passwordPlusSalt;
}
미리 감사
나쁘지 보이지 않는 - 난 그냥 사용하는 것이 정직 [jBCrypt] (HTTP ://www.mindrot.org/projects/jBCrypt/). 그것은 소금으로 해싱, 소금 저장 및 검증을 다룹니다. 모든 코드를 직접 작성하는 것은 화재로 노는 것과 같습니다. –
반복의 부족은 큰 결함입니다. "한 쌍"만 아니라 10000 번 반복해야합니다. (당신이 * slight * understatements의 팬이 아니라면). – CodesInChaos