이 기사는 주로 Java 구현에 일반적으로 사용되는 암호화 알고리즘을 소개합니다 - 일원 암호화 알고리즘 MD5 및 SHA는 다음과 같습니다.
1. Java의 보안 아키텍처
1.1 Java의 보안 아키텍처 소개
Java의 보안 프레임 워크를위한 클래스 및 인터페이스를 제공하십시오. JDK Security API는 Java.security 패키지 (및 하위 포장) 및 Sun.SecurityAPI 패키지 (및 하위 포장)에 위치한 Java 프로그래밍 언어의 핵심 API입니다. 개발자가 프로그램에서 저수준 및 고급 보안 기능을 모두 사용하도록 도와 주도록 설계되었습니다.
JDK 1.1에서 JDK의 첫 번째 릴리스는 "JAVA 암호화 아키텍처"(JCA)를 소개했으며, 이는 Java 플랫폼 비밀번호 기능에 액세스하고 개발하는 데 사용되는 아키텍처를 나타냅니다. JDK 1.1에서 JCA에는 디지털 서명 및 메시지 소화를위한 API가 포함되어 있습니다. JDK 1.2는 Java 암호화 아키텍처를 크게 확장하고 X.509 V3 인증서를 지원하기 위해 인증서 관리 인프라를 업그레이드하고 세밀하고 구성 가능하며 유연하며 확장 가능한 액세스 제어를위한 새로운 Java 보안 아키텍처를 소개합니다.
Java 암호화 아키텍처에는 JDK 1.2 보안 API의 비밀번호 관련 부분 과이 문서에 제공된 일련의 규칙 및 사양이 포함되어 있습니다. 상호 운용 가능한 여러 암호를 구현하려면 "제공자"아키텍처도 제공합니다.
JAVA Password Extension (JCE)은 암호화, 키 교환 및 정보 인증 코드 (MAC)를 포함하여 JCA API를 확장합니다. JCE 및 JDK 암호는 함께 플랫폼과 관련이없는 완전한 암호 API를 제공합니다. JDK의 확장으로서의 JCE는 미국 수출 제어 제약 조건을 준수하기 위해 독립적으로 릴리스됩니다.
1.2 Eclipse에서 JDK의 관련 소스 코드
Java에서 일원 암호화 알고리즘 MD5 및 SHA의 구현을 더 깊이 이해하기 위해 JDK의 소스 코드는 Eclipse IDE 사용과 연관 될 수 있습니다 (저자는 JDK6.0을 사용).
JDK6.0을 설치 한 후에는 JDK의 루트 디렉토리에 SRC.ZIP 디렉토리가 있습니다 (예 : C : /java/jdk1.6.0_21). 이 디렉토리는 다른 디렉토리 (예 : D :/Amigo/Study/Technical Essay/201405)로 압축 될 수 있습니다. src.zip에는 모든 JDK 소스 코드가 포함되어 있지 않습니다. 예를 들어, 태양 아래의 서브 포장은 src.zip에 존재하지 않습니다 (예 : Sun.security 패키지 및이 기사에 사용 된 하위 포장지는 포함되지 않음).
이 하위 포장지를 다운로드하려면 OpenJDK의 소스 코드를 다운로드해야합니다. OpenJDK는 JDK의 오픈 소스 버전이며 GPL 프로토콜 형태로 출시됩니다. JDK7에서 OpenJDK는 JDK7의 백본 개발이되었습니다. Sun JDK7은 OpenJDK7을 기준으로 풀려났습니다. 원래 코드의 대부분은 동일하며 원래 코드의 작은 부분 만 대체되었습니다. JRL (Javaresearch 라이센스, Java Research 라이센스 계약)을 사용하여 게시.
OpenJDK 다운로드 주소 : //www.vevb.com/softs/75724.html
다운로드 한 후, Uniped OpenJDK-6-SRC-B27-26_OCT_2012/jdk/src/share/classe Directory에서 압축 된 SRC 디렉토리에 모든 파일과 폴더를 복사하십시오.
다음으로 Eclipse에서 관련 소스 코드를 구성하십시오. "Wind 이 컴퓨터의 JRE가 구성된 경우 구성 할 필요가 없습니다. 구성되지 않은 경우 오른쪽의 "추가"버튼을 클릭하고 팝업 "add jre"창 (예 : C : /java/jdk1.6.0_21)에서 설치된 JDK6.0의 경로를 선택하십시오. "확인"버튼을 클릭하여 JRE 설정을 완료하십시오.
JRE 설정을 선택하고 오른쪽의 "편집 ..."버튼을 클릭하고 팝업 창에서 Rt.jar 패키지를 선택하고 "소스 첨부 파일"버튼을 클릭하고 팝업 창에서 "외부 폴더 ..."버튼을 클릭 한 다음 소스 코드 경로를 지금 SRC의 경로로 가리 킵니다 (예 : D :/Amigo/Study/201405). 아래 그림을 참조하십시오.
"OK"버튼을 클릭하여 설정을 설정 한 후 MD5 및 SHA의 구현을 작성할 때 관련 MessageDigest의 관련 메소드를 호출 할 때 Debug Mode F5 단일 단계 디버깅을 사용하여 JAVA에서 MD5 및 SHA 일방적 인 암호화 알고리즘의 구현에 주로 관련된 클래스를 볼 수 있습니다.
1.3 JDK의 MD5 및 SHA 암호화의 주요 클래스
JDK6.0에서 MD5 및 SHA와 밀접한 관련된 여러 클래스의 클래스 다이어그램은 다음과 같습니다.
그 중 "MessageDigestSpi"는 최상위 초록 클래스이며, 같은 패키지의 "MessageDigest"및 "Digestbase"는 하위 교정 클래스입니다.
위의 클래스 다이어그램에서 대의원 설계 패턴이 사용됩니다. 이 패턴의 원칙은 클래스 B (여기서 Delegage Inner Class)와 클래스 A (여기서 MessageSgeStSpi 클래스)가 서로 관계가없는 두 클래스라는 것입니다. B는 A와 정확히 동일한 방법과 속성을 가지고 있습니다. 그리고 B의 호출 방법과 속성은 A에서 동일한 이름을 가진 메소드와 속성을 호출하는 것입니다. B는 A에 의해 승인 된 중개자 인 것 같습니다. 타사 코드는 A와 하위 클래스의 존재를 알 필요가 없으며 A 및 하위 클래스와 직접 연결할 필요가 없습니다. B를 통해 A의 기능은 직접 사용할 수 있으며,이 기능은 A의 다양한 기능을 사용할 수있을뿐만 아니라 A와 하위 클래스를 잘 보호 할 수 있습니다.
MD5 및 SHA의 관련 코드는 모두 MD5 및 SHA와 같은 클래스에 있지만 고객을 대상으로 한 MessageGagest Abstract 클래스는 다양한 구현 클래스를 처리 할 필요가 없으며 대의원 클래스를 통해이를 처리 할 필요가 없습니다.
2. MD5 암호화
2.1 개요
메시지 다이제스트 알고리즘 MD5 (중국 이름은 메시지 다이제스트 알고리즘 5 판)는 컴퓨터 보안 분야에서 널리 사용되는 해시 기능입니다. 메시지 무결성 보호를 제공합니다. 이 알고리즘의 파일 번호는 RFC 1321 (R.Rivest, Computer Science and RSA Data Security Inc. 1992 년 4 월)입니다.
MD5의 전체 이름은 1990 년대 초 컴퓨터 과학 및 RSA 데이터 보안 INC의 Ronald L. Rivest of MIT Laboratory에서 개발 한 MD2, MD3 및 MD4에서 개발 한 Message-Digest 알고리즘 5 (Information-Abstract 알고리즘)입니다.
MD5는 완전하고 일관된 정보 전송을 보장하는 데 사용됩니다. 컴퓨터에서 널리 사용되는 해시 알고리즘 중 하나입니다 (추상 알고리즘 및 해시 알고리즘으로도 번역). 주류 프로그래밍 언어는 일반적으로 MD5에서 구현됩니다. 데이터 (예 : 중국어)를 다른 고정 길이 값으로 계산하는 것은 해시 알고리즘의 기본 원리입니다. MD5의 전임자는 MD2, MD3 및 MD4였다.
MD5의 기능은 디지털 서명 소프트웨어로 개인 키에 서명하기 전에 대용량 정보를 기밀 형식으로 "압축"하도록 허용하는 것입니다 (즉, 모든 길이의 바이트 스트링을 특정 길이의 16 진 스트링으로 변환).
2.2 알고리즘 원리
MD5 알고리즘에 대한 간단한 설명은 다음과 같습니다. MD5는 512 비트 패킷의 입력 정보를 처리하고 각 패킷은 16 개의 32 비트 서브 포켓으로 나뉩니다. 일련의 처리 후, 알고리즘의 출력은 4 개의 32 비트 패킷으로 구성됩니다. 이 4 개의 32 비트 패킷을 계단식으로 옮긴 후 128 비트 해시 값이 생성됩니다.
MD5 알고리즘에서 정보를 먼저 채워야하므로 비트 길이 쌍 512의 나머지 균형 결과는 448과 같습니다. 따라서 정보의 비트 길이는 n*512+448로 확장되고 N은 비 음성 정수이며 N은 0이 될 수 있습니다. 충전 방법은 다음과 같습니다. 정보 뒤에 1 및 수많은 0을 채우고 위의 조건이 충족 될 때까지 0으로 정보를 채우지 마십시오. 그런 다음 상단 요금 정보 길이가 64 비트 바이너리에 부착됩니다. 이 두 단계의 처리 후, 정보의 비트 길이 = n*512+448+64 = (n+1)*512, 즉 길이는 정확히 512의 정수 배수입니다. 이에 대한 이유는 후속 처리의 정보 길이에 대한 요구 사항을 충족시키는 것입니다.
2.3 Java의 MD5 구현
MD5 암호화 알고리즘의 Java 구현은 다음과 같습니다.
패키지 amigo.endecrypt; import java.security.messagegegest;/*** md5 암호화 사용* @author xingxing, xie* @dateTime 2014-5-31*/public class md5util {/**** md5 암호화 {/**** md5 코드를 생성합니다* @ @ @ @hit rething 32 rrypt to ancrypt to be a @ Code*/ public static String md5encode (String Inst)는 예외 {MessageDigest md5 = null; try {md5 = messageDigest.getInstance ( "md5"); } catch (예외 e) {system.out.println (e.toString ()); e.printstacktrace (); 반품 ""; } byte [] bytearray = instr.getBytes ( "utf-8"); 바이트 [] md5bytes = md5.digest (bytearray); StringBuffer hexValue = new StringBuffer (); for (int i = 0; i <md5bytes.length; i ++) {int val = ((int) md5bytes [i]) & 0xff; if (val <16) {hexValue.append ( "0"); } hexValue.append (Integer.toHexString (val)); } return hexValue.toString (); } / ** * 테스트 메인 함수 * @param args * @throws Exception * / public static void main (String args []) 예외 {string str = new String ( "amigoxiexiexiexingxing"); System.out.println ( "원본 :" + str); System.out.println ( "md5 :" + md5encode (str)); }}테스트 결과 :
원본 : amigoxiexiexingxing
Post-MD5 : E9AC094091B96B84CCA48098BC21B1D6
3. SHA 암호화
3.1 개요
SHA는 데이터 암호화 알고리즘입니다. 이 알고리즘은 수년에 걸쳐 암호화 전문가에 의해 개발되고 개선되었으며 점점 더 완벽 해지고 있습니다. 이제 가장 안전한 해싱 알고리즘 중 하나가되었으며 널리 사용되었습니다. 이 알고리즘의 아이디어는 일반 텍스트를받은 다음 돌이킬 수없는 방식으로 (보통 작은) 암호 텍스트로 변환하는 것입니다. 또한 입력 코드 문자열 (프리 매핑 또는 정보라고 함)을 가져 와서 더 짧은 길이의 고정 자릿수 출력 시퀀스, 즉 HASH 값 (정보 다이제스트 또는 정보 인증 코드라고도 함)으로 변환하는 프로세스로 간단히 이해할 수 있습니다. 해시 함수 값은 일반 텍스트의 일종의 "지문"또는 "요약"이라고 할 수 있으므로 해시 값의 디지털 서명은 일반 텍스트의 디지털 서명으로 간주 될 수 있습니다.
SHA (Secure Hash 알고리즘)는 National Standard FIPS 180으로 National Standards and Technology가 발표했습니다. 최신 표준은 2008 년에 FIPS Pub 180-3으로 업데이트되었습니다. 그 중에서도 SHA-1, SHA-224, SHA-256, SHA-384 및 SHA-512와 같은 몇 가지 단방향 해싱 알고리즘이 지정됩니다. SHA-1, SHA-224 및 SHA-256은 길이가 2^64 이진 비트를 넘지 않는 메시지에 적합합니다. SHA-384 및 SHA-512는 길이가 2^128 이진 비트를 넘지 않는 메시지에 적합합니다.
3.2 원칙
SHA-1은 데이터 암호화 알고리즘입니다. 이 알고리즘의 아이디어는 일반 텍스트를받은 다음 돌이킬 수없는 방식으로 (보통 작은) 암호 텍스트로 변환하는 것입니다. 또한 입력 코드 문자열 (프리 매핑 또는 정보라고 함)을 가져 와서 더 짧은 길이의 고정 자릿수 출력 시퀀스, 즉 HASH 값 (정보 다이제스트 또는 정보 인증 코드라고도 함)으로 변환하는 프로세스로 간단히 이해할 수 있습니다.
일원 해시 함수의 안전은 해시 값을 생성하는 작동 과정의 강력한 일원 특성에 있습니다. 암호가 입력 순서에 포함 된 경우 아무도 암호를 모르고 올바른 해시 값을 생성 할 수 없으므로 보안을 보장 할 수 없습니다. SHA는 블록 당 512 비트 (64 바이트)로 입력 스트림을 차단하고 정보 인증 코드 또는 정보 다이제스트라는 20 바이트의 출력을 생성합니다.
이 알고리즘의 입력 패킷의 길이는 무제한이며 생성 된 출력은 160 비트 메시지 소화입니다. 입력은 512 비트 패킷으로 처리됩니다. SHA-1은 돌이킬 수없고 충돌을 방지하며 눈사태 효과가 좋습니다.
디지털 서명은 해시 알고리즘을 통해 구현할 수 있습니다. 디지털 서명의 원칙은 기능 작동 (HASH)을 통해 메시지 소화로 전송할 일반 텍스트를 변환하는 것입니다 (다른 일반 텍스트는 다른 메시지 소화에 해당합니다). 메시지 다이제스트는 암호화되어 일반 텍스트와 함께 수신자에게 전송됩니다. 수신자는 해독에 대한 새 메시지 다이제스트를 생성하고 발신자의 메시지 다이제스트를 비교합니다. 비교 결과는 일관성이 있으며, 이는 일반 텍스트가 변경되지 않았 음을 의미합니다. 일관성이 없다면 일반 텍스트가 변조되었음을 의미합니다.
Mac (정보 인증 코드)은 입력 정보의 일부가 암호 인 해시 결과입니다. 이 암호를 아는 참가자 만 Mac 코드의 정당성을 계산하고 검증 할 수 있습니다.
3.3 Java의 SHA 구현
SHA의 Java 구현은 MD5와 유사하며 참조 코드는 다음과 같습니다.
package amigo.endecrypt; import java.security.messagegegest;/*** shaa 암호화* @author xingxing, xie* @datetime 2014-6-1*/public class shautil {/**** sha 암호화 Sha 코드 생성*/public eparam string* @Return @Return 40-bit 40-bit 40-bit 40-bit 40-bit 40-bit 40- Shaencode (String Instr)는 예외 {MessageDigest sha = null; try {sha = messagedigest.getinstance ( "sha"); } catch (예외 e) {system.out.println (e.toString ()); e.printstacktrace (); 반품 ""; } byte [] bytearray = instr.getBytes ( "utf-8"); 바이트 [] md5bytes = sha.digest (bytearray); StringBuffer hexValue = new StringBuffer (); for (int i = 0; i <md5bytes.length; i ++) {int val = ((int) md5bytes [i]) & 0xff; if (val <16) {hexValue.append ( "0"); } hexValue.append (Integer.toHexString (val)); } return hexValue.toString (); } / ** * 테스트 메인 함수 * @param args * @throws Exception * / public static void main (String args []) 예외 {string str = new String ( "amigoxiexiexiexingxing"); System.out.println ( "원본 :" + str); System.out.println ( "sha :" + Shaencode (str)); }}테스트 결과는 다음과 같습니다.
원본 : amigoxiexiexingxing
SHA 후 : 04F79F496DD6BDAB3439511606528A4AD9CAAC5E
3. SHA-1과 MD5의 비교
둘 다 MD4에서 파생되기 때문에 SHA-1 및 MD5는 서로 매우 유사합니다. 이에 따라, 그들의 강도와 기타 특성은 비슷하지만 다음과 같은 점에서도 차이가 있습니다.
1) 강제 공격에 대한 보안 : 가장 중요하고 중요한 차이점은 SHA-1 다이제스트가 MD5 다이제스트보다 32 비트 길이라는 것입니다. 강제 기술을 사용하면 메시지를 생성하기가 어렵 기 때문에 다이제스트가 주어진 다이제스트와 동일하게하는 것은 MD5의 경우 2^128의 작동 및 SHA-1의 경우 2^160의 작동입니다. 이런 식으로 SHA-1은 강제 공격에 더 큰 힘을 가지고 있습니다.
2) 비밀번호 분석의 보안 : MD5의 설계로 인해 비밀번호 분석에 취약하며 SHA-1은 그러한 공격에 덜 취약한 것으로 보입니다.
3) 속도 : 동일한 하드웨어에서 SHA-1은 MD5보다 느리게 실행됩니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.