https://dev-eunse.tistory.com/112 : 이건 문자만 단순 암호화.. base64는 쉽게 뚫림
✅ security 모든 형태 구조
암호화 : bit 단위로 문자를 별도의 임의값으로 변경하는 것
MD5
(128bit) / 해시 암호화 코드 / 가장 많이 쓰임 / 뚫리긴 뚫림
SHA-1
(160bit) / MD5를 보다 높은 bit를 활용하여 사용하는 방식 / 뚫리긴 뚫림
SHA-2
SHA-1에서 bit수는 개발자가 직접 정할 수 있게 변경됨 ( 224bit , 256bit , 384bit , 512bit ) / AI가 뚫음 -_-
SHA-3
256,384,512 bit
SHA-2에 특수문자 형태의 코드를 추가
=> pw -> MD5 -> SHA 로 두번 꼬아버리는 형태 많이 사용
RSA
2048bit
전자서명을 사용하는 형태로 암호화 (Linux에서 최초 개발)
보다 강력(금융권에서 많이 사용)
⚡ MD5, SHA-1,SHA-2 ,SHA-3
문자가 길어짐! db 설계시 받을 문자 수 주의!
=> MD5 는 입력하는 텍스트 길이가 길어져도 암호화된 텍스트 길이가 엄청 길어지진 않음
MD5(16진수) : 80~100자
MD5(2진수,5진수) : 150~200자
but SHA부터는 길어질수도 있음 : text로 받음<body> <form id="frm"> 비밀번호 : <input type="text" name="mpass"><br> <button type="button" onclick="gopage()">전송</button> </form> </body> </html> <script> function gopage(){ frm.method = "post"; frm.action = "./securityok.do"; frm.submit(); } </script>
🔽 1234 입력
//web.xml 선언을 하지 않고 사용 @WebServlet("/securityok.do") public class securityok extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String mpass = request.getParameter("mpass"); String db = "81dc9bdb52d04dc2036dbd8313ed055"; //db에 저장된 암호 //MD5 - 예외처리해야함 try { //암호화 라이브러리 MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(mpass.getBytes()); //모든 암호화는 bit형태 byte[] m = md5.digest(); /*[-127, -36, -101, -37, 82, -48, 77 -62, 0, 54, -37, -40, 49, 62, -48, 85] 머 이렇게 출력 System.out.println(Arrays.toString(m)); */ StringBuilder sb = new StringBuilder(); for(byte w : m) { String word = String.format("%x", w); sb.append(word); } System.out.println(sb); //81dc9bdb52d04dc2036dbd8313ed055 출력 - 암호화 완 //암호화로 생성된 객체 자료형은 StringBuilder이므로 String으로 형 변환 후 비교 if(sb.toString().equals(db)) { System.out.println("로그인 하셨습니다"); }else { System.out.println("패스워드 틀림"); } }catch(Exception e) { System.out.println("올바른 문자가 아니므로 암호화 정상작동 실패"); } } }
문자포맷
%x : 소문자+숫자
%X : 대문자+숫자
=> 16진수 형태의 구성
%02x : 2진수
%05x : 5진수
..원하는대로..
해당 () 안에 형식만 바꾸면 됨//MD5 : 81dc9bdb52d04dc2036dbd8313ed055 출력 MessageDigest md5 = MessageDigest.getInstance("MD5"); //SHA-1 : 7110eda4d09e62aa5e4a390b0a572acd2c220 출력 MessageDigest md5 = MessageDigest.getInstance("SHA1"); //SHA-2부터 - 포함 //SHA-2 : 3ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4 출력 MessageDigest md5 = MessageDigest.getInstance("SHA-256"); //SHA-3 : b0f3dc43a9c5c5f67651a8c9108b4c2b98e7246b2eea14cb204295 출력 MessageDigest md5 = MessageDigest.getInstance("SHA3-224");
'CLASS > SERVLET' 카테고리의 다른 글
#9-2 / 보안2 (0) | 2024.07.05 |
---|---|
web.xml 선언을 하지 않고 사용 (0) | 2024.07.05 |
로그인 - 자동저장 (0) | 2024.07.03 |
#8-2 / 게시판 insert 모듈화... (0) | 2024.06.21 |
#8-1 / 게시판 (0) | 2024.06.21 |