dtb에 새로운 항목을 만들 때 hash + salt라는 개념을 이해합니다. 소금에 고정 된 문자열을 사용하면 구현하기가 어려울 수도 있지만 어떻게해야할까요, 예를 들어 사용자의 생일을 소금으로 사용하고 싶습니까? 데이터베이스에 암호를 저장하는 것은 쉽지만 로그인하는 동안 이것을 해싱하는 방법은 무엇입니까? 그들은 소금 username
값을 사용하여 어디, 내 applicationContext-security.xml
파일이 코드 조각을 봤했습니다스프링 3 보안에서 해쉬와 솔트 구현
<!-- authentication from database -->
<security:authentication-manager>
<security:authentication-provider>
<security:jdbc-user-service
data-source-ref="dataSource"
users-by-username-query="
select username,password, enabled
from users where username=?"authorities-by-username-query="
select u.username, ur.authority from users u, user_roles ur
where u.user_id = ur.user_id and u.username =? " />
<security:password-encoder hash="sha-256">
<security:salt-source user-property="username" />
</security:password-encoder-->
</security:authentication-provider>
</security:authentication-manager>
그래서 내가 제대로 이해한다면, 그 의미, 내가 소금으로 사용자의 생일을 사용하고자하는 경우에 그, 나는 그것을 내 dtb에 저장해야하고, dtb에서 그것을 꺼내서 그것을 소금으로 사용합니까? 내 users
테이블 열 username
, password
, birthday
에있는 경우 암호가 해시 될 수 있기 때문에 공격자가 확실하기 때문에 birthday
값이 소금으로 사용되므로 나를 이해할 수 없습니다. . 실종되었거나 실제로 작동합니까?
요즘에는 [BCrypt] (http://stackoverflow.com/a/8528804/241990)와 같은 것이 좋습니다. 염분은 내부적으로 이루어 지므로 염려 할 필요가 없으며 더욱 안전합니다. –