java 불가역 암호화 알고리즘의md5 암호화 알고리즘 사용 예시

MD5의 전칭은 Message-Digest Algorithm 5입니다. Message-Digest는 일반적으로 바이트 문자열(Message)의 Hash 변환을 가리키는데 임의의 길이의 바이트 문자열을 일정한 긴 정수로 바꾸는 것입니다.MD5는 임의의 길이의'바이트 문자열'을 128bit의 큰 정수로 변환하고 거스를 수 없는 문자열 변환 알고리즘이다. 다시 말하면 원본 프로그램과 알고리즘 설명을 보더라도 MD5의 값을 원시 문자열로 바꿀 수 없다. 수학 원리상 원시 문자열이 무한히 많기 때문이다. 이것은 반함수가 없는 수학 함수와 같다

import java.security.MessageDigest;  
public class Test_MD5{  
public final static String MD5(String s) {  
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
try {
byte[]strTemp=s.getBytes();
// MD5 MessageDigest
MessageDigestmdTemp=MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[]md=mdTemp.digest();
intj=md.length;
charstr[]=newchar[j*2];
intk=0;
for(inti=0;i<j;i++){
byteb=md[i];
//System.out.println((int)b);
// (int)b
str[k++]=hexDigits[b>>4&0xf];
str[k++]=hexDigits[b&0xf];
}
returnnewString(str);
}catch(Exceptione){returnnull;}
}
//
publicstaticvoidmain(String[]args){
System.out.println("caidao MD5 :
"+Test_MD5.MD5("caidao"));
System.out.println("https://www.jb51.net/ MD5 :
"+Test_MD5.MD5("https://www.jb51.net/"));
}
}
MD5의 전형적인 응용 프로그램은 메시지 (바이트 문자열) 에 대한 핑거프린트 (지문) 를 생성하여'변경'을 방지하는 것이다.예를 들어, 당신은readme라는 한 단락을 썼다.txt 파일에서 이readme.txt는 MD5의 값을 생성하여 기록합니다. 그리고 이 파일을 다른 사람에게 전파할 수 있습니다. 다른 사람이 파일의 내용을 수정하면 이 파일에 대해 MD5를 다시 계산할 때 발견할 수 있습니다.만약 제3자의 인증 기구가 하나 더 있다면 MD5로 파일 작성자의'발뺌'을 방지할 수 있다. 이것이 바로 이른바 숫자 **** 응용이다.MD5는 암호화와 복호화 기술에도 광범위하게 사용된다. 많은 운영체제에서 사용자의 암호는 MD5 값(또는 유사한 다른 알고리즘) 방식으로 저장된다. 사용자가 Login을 사용할 때 시스템은 사용자가 입력한 암호를 MD5 값으로 계산한 다음에 시스템에 저장된 MD5 값과 비교한다. 시스템은 사용자의 암호가 무엇인지 모른다.MD5는 이론적으로 단방향의 해시 산열이다. 일부 해커들이 이런 암호를 찾아내는 방법은 일종의'사전달리기'라고 불리는 방법이다.두 가지 방법으로 사전을 얻을 수 있다. 하나는 일상적으로 수집하는 암호로 쓰이는 문자열표이고, 다른 하나는 배열 조합 방법으로 생성된 것이다. 먼저 MD5 프로그램으로 이 사전 항목의 MD5 값을 계산한 다음에 목표의 MD5 값으로 이 사전에서 검색한다.암호의 최대 길이가 8이라고 가정하더라도 암호는 알파벳과 숫자만 26+26+10=62자일 수 있고, 배열된 사전의 항수는 P(62,1)+P(62,2)...+P(62,8), 그것도 이미 천문학적인 숫자입니다. 이 사전을 저장하려면 TB급 디스크 그룹이 필요합니다. 그리고 이런 방법은 목표 계정의 암호 MD5 값을 얻을 수 있는 전제가 있습니다.

좋은 웹페이지 즐겨찾기