기본 콘텐츠로 건너뛰기

해시함수 md5, sha256

해시함수 
고정된 길이의 해쉬값을 출력하는 함수

md5를 사용했을때의 결과는 다음과 같다.
  
입력값이 "1"일때
->  c4ca4238a0b923820dcc509a6f75849b

입력값이  "adbklakdjrlyjlkwejlgkjsrjitpjhopeeojlkajslkdjfkjaskdfjglkdsjflkhawkejrpy pasjglkajerlkjylkajsdlkfjlkasjdptggowrjytsjdllqqweqwe" 일때
-> cd274b08e463c7ef783bc659f8f8b6b2
입력값의 길이의상관없이 문자의 길이는 32자이다. 
(md5 테스트 : http://www.danstools.com/md5-hash-generator/ ) 


사용목적
보안을 위해
수신측이 입력값을 알지못해도
보내는 시점과 받는 시점의 해시값을 비교하고,
만약 그값이 동일하다면,
이값은 변조가 없었다. 라는 판단을 하는것이 목적
인증암호, 디지털서명 등에 사용한다.

md5나, sha256이나 대강 살펴보면
입력값이받아서
base64처럼 적당한 블록단위로 쪼개고,
부족한부분은 패딩으로 채운뒤에 
블록단위로 base64보다 훨씬 복잡하게 계산하는방식이다. 
그리고 그 복잡도에 따라 명칭이 다르며
안정성도 역시 다를것이다.

이제 md5는 쓰지 말란다.
이미 털렸다고.


알고리즘은 굉장히 복잡하지만, 
개발자가 갖다 쓰기에는 무척 간편하다.


Algorithm and variant Output size
(bits)
Internal state size
(bits)
Block size
(bits)
Max message size
(bits)
Rounds Operations Security
(bits)
Example Performance[31]
(MiB/s)
MD5 (as reference) 128 128
(4 × 32)
512 264 − 1 64 And, Xor, Rot,
Add (mod 232),
Or
<64
(collisions found)
335
SHA-0 160 160
(5 × 32)
512 264 − 1 80 And, Xor, Rot,
Add (mod 232),
Or
<80
(collisions found)
-
SHA-1 160 160
(5 × 32)
512 264 − 1 80 <80
(theoretical attack[32] in 261)
192
SHA-2 SHA-224
SHA-256
224
256
256
(8 × 32)
512 264 − 1 64 And, Xor, Rot,
Add (mod 232),
Or, Shr
112
128
139
SHA-384
SHA-512
SHA-512/224
SHA-512/256
384
512
224
256
512
(8 × 64)
1024 2128 − 1 80 And, Xor, Rot,
Add (mod 264),
Or, Shr
192
256
112
128
154
SHA-3 SHA3-224
SHA3-256
SHA3-384
SHA3-512
224
256
384
512
1600
(5 × 5 × 64)
1152
1088
832
576
Unlimited 24 And, Xor, Rot,
Not
112
128
192
256
-
SHAKE128
SHAKE256
d (arbitrary)
d (arbitrary)
1344
1088
min (d/2, 128)
min (d/2, 256)
-

댓글

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. 님 감사한 자료입니다.
    질문이 있습니다.
    위에 입력값의 길이의상관없이 문자의 길이는 32자이다.
    라고 적혀있는데요.
    md5의 결과값은 128비트인데, 128비트는 16바이트이지 않습니깡?
    16바이트면 16글자여야 하는것 아닌가요?
    저도 "1"을 입력햇더니 님과 같은 32글자는 나오는데...
    이게 왜 16글자가 아니라 32글자가 나오는질 이해하고 싶은데 모르겠네요...

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

메일서버가 스팸으로 취급받을때

설치한 메일서버를 통해 발송되는 메일이 스팸으로 들어가는 경우가 더러 있다. 이게 한번 들어가기는 쉬운데, 빠져나오기는 드럽게 힘든것 같다... 본인의 경우에는 우선 국내서비스에는 별 무리 없이 들어간다. (naver,daum 등) 그런데 해외메일 그중 Gmail, Hotmail 에는 에누리없이 스팸으로 간주되고 있었다. Gmail같은 경우에는 그래도 스팸함으로 발송은 제대로 되는반면에 Hotmail같은경우에는 아예 수신자체가 안되는 경우도 더러있다.. ㅡ,.ㅡ; 제일 좋은 방법은 Gmail,Hotmail에 전화걸어서 우리 메일서버 IP white Ip로 등록해달라!!! 하면 좋지만, 얘네들은 걸어봤자 자동응답기고, 문의채널은 구글 그룹스 게시판이 전부다.. 본론으로 들어가서. 해외 메일이 차단될 경우 내 매일서버ip가 스팸ip로 등록되 버린 경우일 수 있다. (본인처럼. ㅎ) 이것부터 조회 해보고 싶으면 RBL(real-time blocking List) 체크를 해야 하는데, RBL체크 해주는 사이트는 꽤 많이 있고, 그중 좀 깔끔해 보이는곳 하나 소개. http://www.anti-abuse.org/ 메일서버ip 입력하고 조회해보면 쭈루룩 리스트가 나온다. 그 중 빨간불이 들어온 부분이 메일 서버가 스팸서버가 된 각종 이유들이다.ㅋ 본인의 경우 CBL 때문에 걸렸는데, 내용은 아래와 같다. This IP address is HELO'ing as  "localhost.localdomain"  which violates the relevant standards (specifically: RFC5321). 메일서버 도메인에 별다른 작업을 안해놓아서 "localhost.localdomain" 으로 설정되어있었다. 만약 CBL만 바로 테스트 해보고 싶으면 http://cbl.abusea...

[javascript] 특정시간에만 함수 실행

특정시간에만 팝업을 띄우려면?? 특정시간에만 로그인을 막으려면?? 특정시간에만 할일은 의외로 참 많다. 방법? 딱히 없다. 현재시간 구해서 시작시간, 종료시간 사이에 있을때 시작하는 수밖엔. if ((현재시간 > 시작시간) && (현재시간 < 종료시간)){ .. 팝업노출(); 공사페이지 리다이렉트(); 기타등등(); .. } 자바스크립트로 작성하면 다음과 같다. var startdate = "2014012008" ; var enddate = "2014012418" ; var now = new Date (); //현재시간 year = now. getFullYear (); //현재시간 중 4자리 연도 month = now. getMonth () + 1 ; //현재시간 중 달. 달은 0부터 시작하기 때문에 +1 if ((month + "" ). length < 2 ){ month = "0" + month; //달의 숫자가 1자리면 앞에 0을 붙임. } date = now. getDate (); //현재 시간 중 날짜. if ((date + "" ). length < 2 ){ date = "0" + date; } hour = now. getHours (); //현재 시간 중 시간. if ((hour + "" ). length < 2 ){ hour = "0" + hour; } today = year + "" + month + "" + date + "" + hour; //오늘 날짜 완성. / / 시간비교 i...

스레드 동기화1 - syncronized

구현 스레드를 구현하는 방법은 2가지다. 1. Thread 클래스를 extends 한다. 2. Runnable 인터페이스를 implements 한다. 뭐 사실 Thread는 생성자의 변수로 Runnable을 취한다. public Thread (Runnable target) { init( null, target , "Thread-" + nextThreadNum () , 0 ) ; } 그리고 Runnable 인터페이스는 run() 이라는 단일함수를 갖는 인터페이스이다. @FunctionalInterface public interface Runnable { /** * When an object implementing interface <code> Runnable </code> is used * to create a thread, starting the thread causes the object's * <code> run </code> method to be called in that separately executing * thread. * <p> * The general contract of the method <code> run </code> is that it may * take any action whatsoever. * * @see java.lang.Thread#run() */ public abstract void run () ; } 그렇기 때문에 람다식으로 표현이 가능한 것이다. 동기화 동기화는 동시에 같은자원의 접근을 제한하고자 할때 사용한다. 예를들어, 한 우물에서 물을 15번 길어야 하는 일을 해야할때 5명이서 3번만 하면 수고를 5배로 줄일수 있다. 그런데 우물은 하난데 동시에...