로그인에 적용한다고 했을 때 랜덤으로 발생한 암호화한 값을 DB 칼럼에 추가
회원가입시에만 랜덤으로 salt를 부여 후 DB에 저장 해주고
로그인할때 salt 값을 가져와서 평문화된 비밀번호랑 합쳐서
비밀번호 + Salt값을 비교해서 로그인 하면 된다고 한다!
public String encrypt(String pwd) throws NoSuchAlgorithmException {
String raw = pwd;
String hex = "";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(raw.getBytes(Charset.forName("UTF-8")));
hex = String.format("%064x", new BigInteger(1, md.digest()));
return hex;
}
public String salt() throws Exception{
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] bytes = new byte[16];
random.nextBytes(bytes);
String salt = new String(Base64.getEncoder().encode(bytes));
return salt;
}
public String encrypt(String pwd) throws NoSuchAlgorithmException {
String raw = pwd;
String hex = "";
/* 회원가입시 salt 값을 가져오고 DB에 저장해준뒤
그 후에는 DB에서 Salt값 가져와서 암호화 후 비교하기*/
String rawAndSalt = raw+salt();
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(rawAndSalt.getBytes());
hex = String.format("%064x", new BigInteger(1, md.digest()));
return hex;
}
참고문서
https://cocoon1787.tistory.com/832
https://altongmon.tistory.com/673
좋은 정보 감사합니다