이 기사에서는 DES 암호화 및 암호 해독 알고리즘의 Java 구현 분석에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
소개:
데이터 암호화 알고리즘 (DEA)은 특히 재무 데이터의 보안을 보호하는 데 가장 널리 사용되는 주요 시스템 일 수있는 대칭 암호화 알고리즘입니다. 처음 개발 된 DEA는 하드웨어에 포함되었습니다. 일반적으로 자동 텔러 머신 (ATM)은 DEA를 사용합니다. 그것은 몇 년 동안 특허권을 가진 IBM의 연구 작업에서 비롯되었지만 1983 년에 만료 된 후에는 공개 범위에 있으며 특허 사용 수수료없이 특정 조건에서 사용할 수 있습니다. 1977 년 미국 정부에 의해 공식적으로 채택되었습니다.
1998 년 이후 실용적인 DES 해독의 출현은 DES 알고리즘이 더 이상 안전하지 않다고 완전히 선언했다. 1999 년에 NIST는 새로운 표준을 발행하여 DES 알고리즘이 레거시 암호화 시스템에서만 사용할 수 있지만 Desede 알고리즘의 사용을 제한하지 않도록 규정했습니다. 오늘날의 DES 알고리즘은 역사의 단계를 시작하고 있으며 AES 알고리즘을 대체라고합니다.
암호화 원리 :
DES는 추가 8 비트 패치 비트가있는 56 비트 키를 사용하여 최대 64 비트 패킷 크기를 생성합니다. 이것은 암호화 된 텍스트 블록이 2 개로 나뉘어 진 Feistel이라는 기술을 사용하는 반복 블록 암호입니다. 서브 키를 사용하여 루프 기능을 반으로 적용한 다음 다른 절반의 "독점 또는"작업을 수행하십시오. 그런 다음이 두 반쪽을 바꾸면 프로세스가 계속되지만 마지막 루프는 교체되지 않습니다. DES는 16주기, 4 가지 기본 작업 (독점 또는 순열, 대체 및 시프트 작업을 사용합니다.
DES 알고리즘에 대한 JDK 지원
키 길이 : 56 비트
작업 모드 : ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 ~ CFB128/OFB/OBF8에서 OFB128
충전 방법 : nopadding/pkcs5padding/iso10126padding/
Java 암호화 및 암호 해독 대칭 암호화 알고리즘 Desede
Desede는 3DES 또는 Triple DES로도 알려진 Triple DES 암호화 알고리즘입니다. 데이터 블록을 3 번 (또는 2 번) DES (1 회 암호화하는 것보다 3 번 더 빠른 경우)를 암호화하기 위해 세 가지 (또는 2 개) 다른 키를 사용하십시오. 트리플 DES의 강도는 112 비트의 주요 강도와 거의 동일합니다. 반복 횟수를 통해 보안이 향상되지만 암호화 효율이 낮은 문제를 일으 킵니다. Desede 알고리즘의 효율성으로 인해 AES 알고리즘이 탄생했습니다.
지금까지 아무도 Triple Des를 공격하는 효과적인 방법을 제공하지 않았습니다. 핵심 공간에서 키를 검색하면 공간이 너무 커서 실제로는 가능하지 않습니다. 차동 공격 방법이 사용되면, 복잡성은 단일 DES와 비교하여 기하 급수적으로 증가합니다.
Triple Des의 네 가지 모델이 있습니다
DES 알고리즘에 대한 Java 암호화 코드
패키지 com.favccxx.codelib; import java.security.securerandom; import javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyfactory; import javax.crypto.spec.deskeyspec; public classper {private string "; public static bd // 원래 키 데이터에서 Deskeyspec 객체를 만듭니다 Deskeyspec dks = new deskeyspec (key); // 주요 공장을 생성하여 DeskeySpec을 Secretkey Object everinkKeyfactory keyfactory = secretKeyFactory.getInstance (DES)로 변환하는 데 사용합니다. Secretkey SecureKey = keyfactory.generatesEcret (DKS); // 암호 개체는 실제로 암호화 작업을 완료합니다 Cipher Cipher = cipher.getInstance (des); // 암호 객체를 초기화하여 cipher.init (cipher.encrypt_mode, securekey, sr); // 암호화 작업의 공식 실행 CIPHER.DOFINAL (SRC); } / **** @param password password* @param 키 암호화 문자열* @return* / public final static string encrypt (문자열 비밀번호, 문자열 키) {try {return byte2string (accrypt (password.getBytes (), key.getBytes ())); } catch (예외 e) {} return null; } public static string byte2string (byte [] b) {문자열 hs = ""; 문자열 stmp = ""; for (int n = 0; n <b.length; n ++) {stmp = (java.lang.integer.tohexstring (b [n] & 0xff)); if (stmp.length () == 1) hs = hs + "0" + stmp; else hs = hs + stmp; } return hs.toupperCase (); } public static void main (String [] args) {String EncrypTstring = Encrypt ( "is Zhang Sanfeng", "Test Chinese and English Mixed- @123654 {"); System.out.println (EncryptString); } // 출력 : B00542E93695F4CFCE34FC4393C2F4BF} DES 암호 해독 알고리즘의 Java 구현
패키지 com.favccxx.codelib; import java.security.securerandom; import javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyfactory; import javax.crypto.spec.deskeyspec; public descroder {private class {private classe "; / ** * * @param src 데이터 소스 * @param 키 키, 길이는 8 * @return * @throws 예외 */ public static byte [] decrypt (byte [] src, byte [] key)의 배수 여야합니다. 예외 {// des 알고리즘에는 신뢰할 수있는 무작위 숫자 소스 Securrandom sr = new securerandom (); // 원래 키 데이터에서 Deskeyspec 객체를 만듭니다 Deskeyspec dks = new deskeyspec (key); // 주요 공장을 작성한 다음이를 사용하여 DeskeySpec 객체를 SecretKey Object everinkKeyfactory keyfactory = secretKeyFactory.getInstance (DES)로 변환합니다. Secretkey SecureKey = keyfactory.generatesEcret (DKS); // 암호 개체는 실제로 암호 해독 작업을 완료합니다 Cipher Cipher = cipher.getInstance (des); // 암호 객체를 초기화하여 cipher.init (cipher.decrypt_mode, securekey, sr); // 암호 해독 작업의 공식 실행 CIPHER.DOFINAL (SRC); } public final static string decrypt (문자열 data, string key) {try {return new String (decrypt (string2byte (data.getBytes ()), key.getBytes ()); } catch (예외 e) {e.printstacktrace (); } return null; } public static bd 바이트 [] B2 = 새로운 바이트 [B.length / 2]; for (int n = 0; n <b.length; n += 2) {문자열 item = new String (b, n, 2); b2 [n / 2] = (바이트) integer.parseint (항목, 16); } 반환 b2; } public static void main (String [] args) {String desencryptstring = decrypt ( "b00542e93695f4cfce34fc4393c2f4bf", "테스트 중국어 및 영어 혼합 업 @123654"); System.out.println (DesencryPtString); } // 출력 : Zhang Sanfeng}이 기사가 도움이되기를 바랍니다. 이는 DES 암호화 및 암호 해독 알고리즘의 Java 구현의 분석 내용을 소개하는 것입니다. 모두가 우리 웹 사이트를 계속 따르기를 바랍니다! Java를 배우고 싶다면이 웹 사이트를 계속 팔로우 할 수 있습니다.