MD5의 전체 이름은 Message-Digest Algorithm 5입니다. Message-Digest는 일반적으로 바이트 문자열(Message)의 해시 변환을 의미합니다. 이는 임의 길이의 바이트 문자열을 특정 길이의 큰 정수로 변환하는 것입니다. MD5는 임의의 길이의 "바이트 문자열"을 128비트의 큰 정수로 변환하는 것으로, 되돌릴 수 없는 문자열 변환 알고리즘입니다. 즉, 소스 프로그램과 알고리즘 설명을 보더라도 MD5 값은 변환할 수 없습니다. 수학적으로 말하면 원래 문자열로 다시 변환됩니다. 원래 문자열이 무한히 많기 때문입니다. 이는 역함수가 없는 수학 함수와 약간 비슷합니다.
다음과 같이 코드 코드를 복사합니다.
java.security.MessageDigest 가져오기;
공개 클래스 Test_MD5{
공개 최종 정적 문자열 MD5(문자열 s) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
노력하다 {
byte[]strTemp=s.getBytes();
//MD5를 사용하여 MessageDigest 객체 생성
MessageDigestmdTemp=MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
바이트[]md=mdTemp.digest();
intj=md.length;
charstr[]=newchar[j*2];
잉크=0;
for(inti=0;i<j;i++){
바이트b=md[i];
//System.out.println((int)b);
//숫자 (int)b를 2바이트로 암호화합니다.
str[k++]=hexDigits[b>>4&0xf];
str[k++]=16진수[b&0xf];
}
returnnewString(str);
}catch(예외){returnnull;}
}
//시험
publicstaticvoidmain(String[]args){
System.out.println("caidao의 MD5 암호화:/n"+Test_MD5.MD5("caidao"));
System.out.println("//www.VeVB.COm/ MD5 암호화 후:/n"+Test_MD5.MD5("//www.VeVB.COm/"));
}
}
MD5의 일반적인 응용 프로그램은 메시지(바이트 문자열)에 지문을 생성하여 메시지가 "무단 변경"되는 것을 방지하는 것입니다. 예를 들어 readme.txt라는 파일에 단락을 작성하고 이 readme.txt에 대한 MD5 값을 생성하여 기록하면 이 파일을 다른 사람이 수정하면 어떤 내용이든 찾을 수 있습니다. 이 파일의 MD5를 다시 계산할 때. 제3자 인증 기관이 있는 경우 MD5를 사용하면 파일 작성자의 "부인"도 방지할 수 있습니다. 이것이 소위 디지털 암호화 응용 프로그램입니다.
MD5는 암호화 및 암호 해독 기술에도 널리 사용됩니다. 사용자의 비밀번호는 MD5 값(또는 기타 유사한 알고리즘) 형식으로 저장됩니다. 그런 다음 MD5 값은 시스템에 저장된 MD5 값과 비교되며 시스템은 사용자의 비밀번호가 무엇인지 "알지" 못합니다.
MD5는 이론적으로 단방향 해시이며 일부 해커는 이 비밀번호를 해독하기 위해 "사전 실행"이라는 방법을 사용합니다. 사전을 얻는 방법에는 두 가지가 있는데, 하나는 비밀번호로 사용되는 문자열 테이블을 매일 수집하는 것이고, 다른 하나는 순열 및 조합 방식을 사용하여 생성하는 것입니다. 먼저 MD5 프로그램을 사용하여 이러한 사전 항목의 MD5 값을 계산합니다. , 대상의 MD5 값을 사용하여 이 사전에서 검색됩니다.
비밀번호의 최대 길이는 8자이고, 비밀번호는 문자와 숫자만 가능하며, 총 26+26+10=62자라고 가정하더라도, 순열로 형성된 사전의 항목 수는 P이다 (62,1)+P(62, 2)...+P(62,8), 이는 이미 천문학적인 숫자입니다. 이 사전을 저장하려면 TB 수준의 디스크 그룹이 필요하며 이 방법에도 전제 조건이 있습니다. 이는 대상 계정을 얻는 것입니다. 이는 비밀번호에 MD5 값이 있는 경우에만 가능합니다.