BCryptSalt.java

SpringSecurityBase64.java

SpringSecurityHex.java

SpringSecurityPasswordEncoderUtils.java

SpringSecurityShaPasswordEncoder.java

SpringSecurityUtf8.java

SpringSecurityShaPasswordEncoderTest.java


로그인 비밀번호를 DB에 저장하는 방법으로 최근에 가장 많이 사용하는 것이
평문 비밀번호 + SALT를 SHA1, 224, 256, 384, 512로 암호화 해서 저장하는 방법이다.

자세한 설명은 아래 링크를 참조
http://d2.naver.com/helloworld/318732

업무 시스템의 경우
가끔 여러 시스템을 동일한 암호화 방식으로 연동해야 하는 이슈들이 있다.
자바외 언어를 사용하는 경우는 제외하고....
자바를 사용하는 경우 크게 두가지 경우로 나눠 볼수 있다.
1 Spring framework를 사용하는 경우
2 Spring framework를 사용하지 않는 경우

1번의 경우 간단히 스프링이 제공하는 소스를 사용하면 된다.
2번의 경우 누군가가 공통 코드를 개발해서 배포해야 한다.

2번의 경우 어떻게 하면 범용적으로 만들까 고민하다 스프링 소스를 까 봤다.
정말 생각하지 못한 부분까지 고민한 흔적들이 엿 보인다.
이래서 남의 소스를 많이 봐야 하는거 같다.

ShaPasswordEncoder.java 를 예로 설명하면
1) 지원되는 암호화는 1, 224, 256, 384, 512
2) iterations 는 기본값이 1이다.
   복잡도를 높이는 것인데 높을 수록 속도가 늦어 지므로 금융권의 경우 1000을 많이 세팅한다.
3) encodeHashAsBase64
   이걸 보고 참 잘만들었구나 싶었는데....
   기본값은 false 이다. Hex(16진수) 표기
   이 값이 의미하는 바는 SHA256 암호화 값을
   Hex - 16진수로 표기할 것인가 Base64로 표기할 것인가의 차이점인데...
   Base64로 표기할 경우 + 같은 문자가 URL이나 네트웍 통신 레벨에서 URLEncoder를 잘 사용하지 않을 경우
   blank로 치환 되거나 하는 오류가 종종 발생한다.
   이런거까지 고려한걸 보면 역시나 고수들~

SpringSecurityShaPasswordEncoder, SpringSecurityShaPasswordEncoderUtils, SpringSecurityHex, SpringSecurityBase64, SpringSecurityUtf8
은 Spring Security 소스를 그대로 복사한 것이다.
스프링을 사용하지 않은 환경에서 스프링과 동일한 값을 얻을 수 있다.

저작자 표시
신고
Posted by gt1000

블로그 이미지
gt1000

태그목록

공지사항

어제45
오늘5
130,023

달력

 « |  » 2017.09
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 받은 트랙백

글 보관함