내 응용 프로그램에 스프링 보안을 사용하고 있습니다. 사용자가 처음 등록 할 때 암호는 BCryptPasswordEncoder
으로 암호화됩니다.BCryptPasswordEncoder에서 원래 암호를 얻는 방법
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(password);
이제 암호 변경의 경우, 사용자는 현재 암호를 입력하고 나는이 현재 암호가 데이터베이스에 저장되어있는 암호화 된 암호에 대한 동일 여부를 확인해야합니다.
동일한 문자열로 동일한 암호화 된 해시를 BCryptPasswordEncoder
과 함께 생성 할 수 없다는 것을 알고 있습니다. 따라서 암호가 같은 경우 암호를 비교하는 유일한 방법은 데이터베이스에 저장된 원래 암호를 가져 와서 현재 입력 된 암호와 비교하는 것입니다.
암호를 비교하거나 데이터베이스 암호 해시 암호에서 원래 암호를 가져 오는 방법이 있습니까?
훌륭한 해결책이지만, 제 경우에는 실제로 느립니다. 그러한 검증 방법을 (anywhery, dorin 'login'등) 그런 검증 방법을 사용하면 전체 실행 시간의 84 % (!!!)를 (profiler로 테스트 한) 취한 다음, 어떤 방법으로 그것을 입증 할 필요가 있습니다 (확실하게 bcrypt는 디자인,하지만 그 검사가 최적화되지 않은 것 같습니다) –
@AlexEfimov, 나는 실제 시간과 configs보다는 전체 실행 시간의 %를보고 싶습니다. 그 이유는 상대적으로 중요하지 않은 시간의 84 %도 중요하지 않기 때문입니다. 이 특정 작업은 느리지 만 성능과 보안은 반대 요구 사항이며 요구 사항이 까다로운 거래를 요구할 수도 있습니다. 몇 가지 웹 응용 프로그램에서이 정확한 코드를 로그인 용으로 사용하며 문제가 없습니다. [또한 일부 정보에 대해이 허용 된 대답을 살펴보십시오] (https://security.stackexchange.com/questions/17207/recommended-of-rounds-for-bcrypt). – ChiefTwoPencils