Spring security: кодировщик паролей и стандартный кодировщик паролей

#encoding #passwords

#кодирование #пароли

Вопрос:

Допустим, я хэширую пароли с помощью StandardPasswordEncoder, который использует SHA-256 и 8-битные случайные символы в качестве соли, и сохраняю его в базе данных (например, для регистрационной формы).

И затем я проверяю это с помощью

 <security:password-encoder hash="sha-256" >
</security:password-encoder> (for login form)
  

Знает ли этот последний, что первый закодировал его таким образом, что соль составляет 8 байт случайно сгенерированной соли? И даже если он знает, как он узнает, какую соль применить, чтобы получить тот же хэш?

Или, может быть, я полностью сбился с пути, и стандарт SHA-256 уже предполагает, что внутри должна быть строго 8-битная соль для хеширования?

Спасибо,

Ответ №1:

Решаемая проблема, я не буду вдаваться в подробности, но лучше используйте org.springframework.security.authentication.encoding.ShaPasswordEncoder ,

  <bean id ="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder" >
 <constructor-arg value="256"/>
 <property name="iterations" value="1024"/> 
 </bean>
  

и ссылайтесь на этот компонент из вашего контекста безопасности:

          <security:password-encoder ref="passwordEncoder">
            <security:salt-source user-property="username"/>
        </security:password-encoder>
  

Комментарии:

1. Недостатком этого является то, что ShaPasswordEncoder реализует устаревший кодировщик паролей вместо более нового org.springframework.security.crypto.password. Кодировщик паролей