중화사전망 - 자전 검색 - MD5 암호란 무엇입니까?
MD5 암호란 무엇입니까?
MD5 암호화 알고리즘의 기본 사항을 소개합니다. MD5 의 전체 이름은 Message-Digest Algorithm 5 로, MIT 컴퓨터 과학 연구소와 RSA 데이터 보안 회사가 90 년대 초에 발명하여 MD2, MD3, MD4 에서 개발되었습니다.
메시지 요약 (Message-Digest) 은 일반적으로 메시지의 해시 변환, 즉 모든 길이의 바이트 문자열을 특정 길이의 큰 정수로 변환하는 것을 의미합니다. "문자열" 대신 "바이트 문자열" 이라는 단어를 사용했습니다. 이 변환은 문자 세트나 인코딩 방법과는 무관하기 때문입니다.
MD5 는 임의의 길이의 "바이트 문자열" 을 128bit 의 큰 정수로 변환하는 돌이킬 수 없는 문자열 변환 알고리즘입니다. 즉, 소스 프로그램과 알고리즘에 대한 설명을 보더라도 MD5 값을 원래 문자열로 다시 변환할 수 없습니다. 수학적으로 볼 때, 무한한 원시 문자열이 있기 때문에, 반함수가 없는 수학 함수와 비슷하다.
MD5 의 일반적인 응용 프로그램은 메시지 (바이트 문자열) 에 대한 지문을 생성하여 변조를 방지하는 것입니다. 예를 들어, readme.txt 라는 파일에 단락을 쓰고 이 readme.txt 에 대한 MD5 값을 생성하여 기록하는 경우 이 파일을 다른 사람에게 전파할 수 있습니다. 다른 사용자가 파일의 내용을 수정한 경우 해당 파일의 MD5 를 다시 계산하면 해당 파일을 찾을 수 있습니다. 제 3 자 인증 기관이 있는 경우 MD5 는 문서 작성자의 "거부", 즉 디지털 서명 애플리케이션도 방지합니다.
MD5 는 암호화 및 암호 해독 기술에도 널리 사용됩니다. 많은 운영 체제에서 사용자의 암호는 MD5 값 (또는 이와 유사한 다른 알고리즘) 으로 저장됩니다. 사용자가 로그인하면 사용자가 입력한 비밀번호가 MD5 값으로 계산된 다음 시스템에 저장된 MD5 값과 비교되지만 사용자의 비밀번호가 무엇인지 "알" 수 없습니다.
일부 해커들이 이 비밀번호를 해독하는 방식은' 사전 실행' 이라는 방법이다. 사전을 가져오는 방법에는 두 가지가 있습니다. 하나는 매일 수집한 암호로 사용되는 문자열 테이블이고, 다른 하나는 조합을 정렬하여 생성하는 것입니다. 먼저 MD5 프로그램을 사용하여 이러한 사전 항목의 MD5 값을 계산한 다음 이 사전에서 대상의 MD5 값을 찾습니다.
최대 암호 길이가 8 이고 암호는 문자와 숫자일 수 있지만, ***26+26+ 10=62 자, 사전의 항목 수는 P (62,1)+p 입니다
사용자 계정 관리는 많은 전자 상거래 및 커뮤니티 응용 프로그램에서 가장 일반적으로 사용되는 기본 기능 중 하나입니다. 많은 응용 프로그램 서버가 이러한 기본 구성 요소를 제공하지만 많은 응용 프로그램 개발자는 관리 유연성을 높이기 위해 관계형 데이터베이스를 사용하여 사용자를 관리하는 것을 선호합니다. 게으른 방법은 사용자의 비밀번호가 일반적으로 일반 텍스트 또는 단순 변환 후 데이터베이스에 직접 저장되는 것입니다. 따라서 이러한 사용자의 암호는 소프트웨어 개발자나 시스템 관리자에게 더 이상 비밀이 아니라고 할 수 있습니다. 이 문서의 목적은 Java Bean 의 MD5 구현을 소개하고 MD5 를 사용하여 사용자 계정 비밀번호를 처리하는 예를 제공하는 것입니다. 이 방법을 사용하면 관리자와 프로그래머가 비밀번호를 초기화할 수 있지만 사용자의 비밀번호를 볼 수 없습니다. 그러나 중요한 점은 사용자의 암호 설정 습관을 보호하는 것입니다.
MD 암호화 알고리즘의 JAVA 설명은 다음과 같습니다.
Java.security. *;
Java.security.spec. *;
Md5 클래스 {
공용 최종 정적 문자열 MD5 (문자열 s){
Char hexDigits[] = {
0',' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' a'
시도 {
Byte [] strtemp = s.getbytes ();
Messagedigest mdtemp = messagedigest.getinstance ("MD5");
Mdtemp.update (strtemp);
Byte [] MD = mdtemp.digest ();
Int j = md.length
Char str [] = new char [j * 2];
Int k = 0;;
For(int I = 0;; 나 & ltj;; I++) {
Bytebyte0 = MD [I];
Str [k++] = hexdigits [byte0 > & gt>4 & amp0xf];
Str [k++] = hexdigits [byte0 & 0xf];
}
새 문자열 (str) 을 반환합니다.
}
캡처 (예외 e){
Null 을 반환합니다
}
}
공용 정적 void main(String[] args){
System.out.print(MD5) 입니다. MD5(" XX ")););
}