DefaultHashService와 함께 DefaultPasswordService와 함께 PasswordMatcher를 사용하려고합니다.Apache Shiro - 암호 형식 문제
DefaultHashService hashService = new DefaultHashService();
hashService.setHashIterations(10000);
hashService.setHashAlgorithmName(Sha512Hash.ALGORITHM_NAME);
hashService.setGeneratePublicSalt(true);
DefaultPasswordService passwordService = new DefaultPasswordService();
passwordService.setHashService(hashService);
String encryptedPassword = passwordService.encryptPassword("password");
System.out.println("Result:"+encryptedPassword);
다음은 데이터베이스에 열 PASSWORD로 저장해야하는 결과입니다.
모든 것이 작동 $ shiro1 $ SHA-512 $ 10000 $ T5nkQEA3qjMLPuB/X + WN4Q == $ qWViYjBljsMwH7FSvhecKlxQqXY11lv8eS4guxD9t8D4HTeKclN/muyTnhzYZ + YvI1YkEg6L7T2kM3qykUG0XQ ==
. 그러나 내 질문에 왜 반복 번호와 알고리즘 이름이 소금과 암호로 저장됩니까? 이 경우 우리는 잠재적 인 공격자에게 정보를 제공합니다. 누가 그와 같은 중요한 속성에 대해 데이터베이스를 덤프합니다.
대단히 감사합니다. 하지만 패스에서 가져온 경우 shiro에서 다음 설정을 지정하는 이유는 무엇입니까? hashService.hashIterations = 10000, hashService.hashAlgorithmName = SHA-512, hashService.generatePublicSalt = true. 불필요한가요? –
나는 Shiro API에 익숙하지 않다.하지만 어느 경우 든 사용자를 위해 해시를 처음 생성 할 때 설정해야한다. Shiro가 생성 된 해시에서 파생시킬 수 있는지, 아니면 이러한 값을 제공합니다. –
실제로 이러한 설정은 코드에 있어서는 안됩니다. DefaultPasswordService는 실제로 그것들을 사용하지 않습니다. https://stackoverflow.com/a/12902798/2969332 –