게시글
질문&답변
2019.11.01
BCrypt 인증 관련 질문드립니다.
(사진) 프로그램 재가동시 바뀝니다. (위 코드 테스트 결과도 fail되는군요..) 프로그램을 처음 초기화 할 경우 생성자에서 솔트를 랜덤 생성해서 넣어주기 때문이죠. 위에 이것에 대해서 다 글을 써놓았는데요. 제가 그래서 의문점이 생긴것이 그러면 어떻게 인코더는 프로그램을 재가동했을때 솔트를 알 수 있나 ? 이것 이었습니다. 왜냐하면 그 부분을 정확히 이해가 안된다면 프로그램 개발을 하고도 찝찝할 수 박에 없기 때문이죠. ----------------------------------------------------------------------------------------------- 테스트 결과 원래인코딩된 패스워드를 솔트로 제공하면 어떻게 알아내는것인지는 모르겠지만 그 전에 어떤 솔트 값을 넣었는지 몰라도 같은 인코딩 결과가 나오게 됩니다. 물론 이 내용도 위 글에서 다 써놓았습니다.. BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();String firstEncoded = passwordEncoder.encode("password");String secondEncoded = passwordEncoder.encode("password");System.out.println(firstEncoded);System.out.println(secondEncoded);$2a$10$bGPFYVPMIodBr3kPBNiA4u8MmOoqeDaTTqwSvwks57Qyci4fjNltK $2a$10$1OxvWR6cYdJYO6/QSFHHDeevmbuaCirH4ZJdezwKzihHuVnlwMynG$2a$10$h0GZ96jg5BR2QDQxWtxQKuehwx.VLOw2QYFQX0PXmZhT94Eh6kPki $2a$10$m.e0/kCIsuY3NODsVVw8xu0JZrprfY3Y2YhFduCEUOWLlpJFHUq1a BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();String firstEncoded = BCrypt.hashpw("password", "$2a$10$bGPFYVPMIodBr3kPBNiA4u8MmOoqeDaTTqwSvwks57Qyci4fjNltK");System.out.println(firstEncoded);$2a$10$bGPFYVPMIodBr3kPBNiA4u8MmOoqeDaTTqwSvwks57Qyci4fjNltK
- 1
- 9
- 1.3K
질문&답변
2019.10.15
스프링이 컨트롤러를 스캔하지 않는 문제
흠 지나가는 사람인데요. 이건 전체소스를 github같은 곳에 올려주셔야 확인 가능할거 같네요.기본적으로 스프링부트로 프로젝트를 만들고 @Controller annotation을 붙이면 빈으로 등록되어야 합니다.
- 0
- 3
- 296
질문&답변
2019.10.14
BCrypt 인증 관련 질문드립니다.
허허 백선장님 .. 디버깅을 하며 분석하다 테스트를 해봤더니요. String password = "!@#$password1234";String passwordHashed = BCrypt.hashpw(password, BCrypt.gensalt());String hashpw = BCrypt.hashpw(password, passwordHashed);System.out.println("first hashed = " + passwordHashed);System.out.println("second hashed = " + hashpw);first hashed = $2a$10$csCCTJlus2OXEyAHmYPmNOCtkEj8lv61WnJRVkVELo0GKjc4bIif. second hashed = $2a$10$csCCTJlus2OXEyAHmYPmNOCtkEj8lv61WnJRVkVELo0GKjc4bIif.이렇게 나오네요. 즉 첫 번째 인자에 rawpassword, 두 번째 인자에 인코딩된 비밀번호를 넣으면첫 번째 인장에 rawpassword, 두 번째 인자에 BCrypt.gensalt()넣었던 결과가 똑같이 나오게 되는군요.
- 1
- 9
- 1.3K
질문&답변
2019.10.14
BCrypt 인증 관련 질문드립니다.
음 계정을 만드는 부분 this.password = passwordEncoder.encode(this.password);을 디버그 해보니PasswordEncoderFactories 에서 bCrypt를 생성할때 SecureRandom random 인자에 null을 주면BCryptPasswordEncoder public String encode(CharSequence rawPassword) { String salt; if (strength > 0) { if (random != null) { salt = BCrypt.gensalt(strength, random); } else { salt = BCrypt.gensalt(strength); } } else { salt = BCrypt.gensalt(); }에서 보이듯이 gensalt를 실행해서 salt를 얻는데요.이 부분을 반복적으로 실행해보니 항상 다른 salt가 나오던데..그렇다면 고정된 값이 아니지 않나요..?
- 1
- 9
- 1.3K
질문&답변
2019.10.14
BCrypt 인증 관련 질문드립니다.
저.. 그런데 제가 궁금해서 더 테스트를 해봤는데요. String passwordHashed = BCrypt.hashpw(password, null);이렇게 테스트를 했더니 salt값으로 null을 넣을 수 없다고 하는데스프링 시큐리티 PasswordEncoderFactories에서는 생성자에서 null로 입력해서 하는데그 이후에 실제로 어떻게 hashing을 하는지 그 과정이 궁금합니다.
- 1
- 9
- 1.3K
질문&답변
2019.10.14
비밀번호 비교 로직
아아 이 부분은 디버깅을 통해서 해결했습니다. 궁금 하신 분들은 DaoAuthenticationProvider class의 additionalAuthenticationChecks 메소드 부분을 보시면 될거 같습니다. 혹 누가 궁금해 하실까봐 질문 남겨놓습니다.
- 0
- 1
- 244
질문&답변
2019.10.14
BCrypt 인증 관련 질문드립니다.
PasswordEncoderFactories에서 public static PasswordEncoder createDelegatingPasswordEncoder() { String encodingId = "bcrypt"; Map, PasswordEncoder> encoders = new HashMap(); encoders.put(encodingId, new BCryptPasswordEncoder()); encoders.put("ldap", new org.springframework.security.crypto.password.LdapShaPasswordEncoder());이렇게 하고 public BCryptPasswordEncoder() { this(-1);}이렇게 public BCryptPasswordEncoder(int strength) { this(strength, null);}이렇게 되어있네요..
- 1
- 9
- 1.3K