>  기사  >  Java  >  대칭 암호화(DES, 3DES, AES)의 Java 구현에 대한 자세한 설명

대칭 암호화(DES, 3DES, AES)의 Java 구현에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-24 11:06:323194검색

이렇게 말하는 두 문장이 있습니다.

1) 알고리즘과 데이터 구조는 프로그래밍의 중요한 부분입니다. 알고리즘과 데이터 구조를 잃으면 모든 것을 잃게 됩니다.

2) 프로그래밍은 알고리즘이자 데이터 구조입니다. 알고리즘과 데이터 구조는 프로그래밍의 영혼입니다.

참고로 이것은 제가 말한 것이 아닙니다. 수많은 프로그래머들이 요약한 내용입니다. 장기적으로 지속 가능한 개발을 원한다면 여전히 더 많은 알고리즘을 연구해야 합니다. 오늘은 암호화 알고리즘 중 대칭형 암호화 알고리즘에 대해 말씀드리고, 여기서는 대칭형 암호화 알고리즘을 프로그래밍하고 사용하는 방법을 알려드리겠습니다. 여기에는 DES, 3DES 및 AES의 세 가지 대칭 암호화 알고리즘 프로그래밍 및 사용이 포함되어 있으며 유용한 정보가 가득합니다.

1. 대칭 암호화 알고리즘

대칭 암호화 알고리즘은 오늘날 가장 널리 사용되고 가장 많이 사용되는 암호화 알고리즘입니다. 소프트웨어 산업뿐만 아니라 하드웨어 산업에서도 널리 사용됩니다. 보안 요구 사항이 다양한 인프라와 관련될 때마다 대칭 암호화 알고리즘에 우선 순위가 부여됩니다.

대칭 암호화 알고리즘의 암호화 키와 복호화 키는 동일합니다. 대부분의 대칭 암호화 알고리즘의 경우 암호화 및 복호화 프로세스가 반대입니다.

(1) 암복호화 통신 모델

대칭 암호화(DES, 3DES, AES)의 Java 구현에 대한 자세한 설명

(2) 특징: 개방형 알고리즘, 적은 계산량, 빠른 암호화 속도, 높은 암호화 효율성

(3) 약점 : 양측이 동일한 키를 사용하고 보안을 보장할 수 없음

대칭암호에는 스트림암호와 블록암호의 두 가지 종류가 있는데 현재는 블록암호가 많이 사용된다.

(4) 블록 암호 작업 모드

1) ECB: 전자 코드북(가장 일반적으로 사용되며, 각 암호화는 독립적인 암호문 그룹을 생성하며 다른 암호문 그룹에 영향을 미치지 않습니다. 동일한 평문은 암호화 후 동일한 암호문을 생성합니다)

2) CBC: 암호문 링크(일반적으로 사용됨, 일반 텍스트 암호화가 이전 암호문과 XOR되어야 하기 전, 또한 동일한 평문을 암호화하여 다른 암호문을 생성함) ciphertext)

일반적으로 사용되는 두 가지 작업 모드 외에도 다음이 있습니다.

3) CFB: Ciphertext Feedback

4) OFB: 출력 피드백

5) CTR: 카운터

이 5가지 작업 모드는 추론 계산을 수행할 때 암호화 알고리즘에서 주로 사용됩니다.

6. 블록 암호 패딩 방식

1) NoPadding: 패딩 없음

2) PKCS5Padding:

3) ISO10126Padding:

7. 일반적으로 사용되는 대칭 암호:

1) DES(Data Encryption Standard, 데이터 암호화 표준)

2) 3DES(Triple DES, DESede, 삼중 DES 암호화를 수행하는 알고리즘)

3) AES(Advanced Encryption Standard, 고급 데이터 암호화 표준, AES 알고리즘은 DES에 대한 공격 알고리즘에 효과적으로 저항할 수 있음)
먼저 이것을 보세요 세 가지 알고리즘의 간단한 비교:

대칭 암호화(DES, 3DES, AES)의 Java 구현에 대한 자세한 설명

대칭 암호화를 구현하기 위해 세 가지 알고리즘 DES / 3DES / AES를 사용하는 방법을 살펴보겠습니다.

2.DES 알고리즘

1.DES: 데이터 암호화 표준, 대칭 암호화 알고리즘 분야의 대표적인 알고리즘

2. 특징: 단축 키(56비트), 단축 라이프 사이클(Crack 방지)

3. Java 구현

1) 키 생성

KeyGenerator keyGen = KeyGenerator.getInstance("DES");//密钥生成器
keyGen.init(56);//初始化密钥生成器
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

2) 암호화

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,加密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3) 복호화

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

우리는 단지 암호화와 복호화에 대해 서로 다른 설정을 지정하는 것은 단지 패턴일 뿐입니다.

3.3DES 알고리즘

1.3DES: 키 길이를 112비트 또는 168비트로 늘리고, 반복 횟수를 늘려 보안을 강화합니다

2. : 처리 속도가 느리고, 키 계산 시간이 길고, 암호화 효율성이 높지 않습니다

3. Java 구현

1) 키 생성

KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密钥生成器
keyGen.init(168); //可指定密钥长度为112或168,默认为168
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

2) 3DES 암호화

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3) 3DES 복호화

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

4.AES 알고리즘(권장)

1.AES: DES 알고리즘에 대해 알려진 모든 공격에 효과적으로 저항할 수 있는 고급 데이터 암호화 표준

2 .특징: 짧은 키 설정 시간, 우수한 감도, 낮은 메모리 요구 사항, 높은 보안

3. Java 구현

1) 키 생성

KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密钥生成器
keygen.init(128); //默认128,获得无政策权限后可为192或256
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

2) AES 암호화

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3) AES 복호화

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

사용의 편의를 위해 DES / 3DES / AES의 세 가지 알고리즘에 대한 도구 클래스를 작성했습니다. 주소: 다운로드 주소(새 DES/3DES/AES 도구 클래스).

그렇습니다. DES / 3DES / AES 3가지 알고리즘이 대칭 암호화를 구현합니다. 모든 분들의 학습에 도움이 되기를 바라며, 또한 모든 분들이 PHP 중국어 홈페이지를 응원해주시기를 바랍니다.

대칭 암호화(DES, 3DES, AES)의 Java 구현에 대한 자세한 설명은 PHP 중국어 웹사이트를 참고하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.