자바 상세 한 단 방향 암호 화-MD5,SHA,HMAC 및 간단 한 구현 인 스 턴 스
개요:
MD5,SHA,HMAC 라 는 세 가지 암호 화 알고리즘 은 역 암호 화 라 고 할 수 있 고 복호화 할 수 없 는 암호 화 방법 이다.
MD5
MD5 즉 Message-Digest Algorithm 5(정보-요약 알고리즘 5)로 정보 전송 이 완전 하 게 일치 하도록 확보 합 니 다.MD5 는 길이 정 보 를 입력 하지 않 고 길이 128-bits 를 출력 하 는 알고리즘 입 니 다.
MD5 알고리즘 은 다음 과 같은 특징 을 가지 고 있 습 니 다.
1.압축성:임의의 길이 의 데이터,계 산 된 MD5 값 의 길 이 는 모두 고정 되 어 있 습 니 다.
2.계산 하기 쉽다:원래 데이터 에서 MD5 값 을 계산 하 는 것 은 매우 쉽다.
3.수정 저항 성:원래 의 데 이 터 를 변경 할 때 1 개의 바이트 만 수정 하 더 라 도 얻 은 MD5 값 은 큰 차이 가 있 습 니 다.
4.충돌 저항:원래 데이터 와 MD5 값 을 알 고 있 습 니 다.같은 MD5 값 을 가 진 데이터(즉,데이터 위조)를 찾 는 것 은 매우 어렵 습 니 다.
MD5 는 유 닉 스,각종 BSD 시스템 로그 인 비밀번호,디지털 서명 등 운영 체제 의 로그 인 인증 에 도 널리 사용 된다.예 를 들 어 유 닉 스 시스템 에서 사용자 의 비밀 번 호 는 MD5(또는 다른 유사 한 알고리즘)로 Hash 연산 을 거 쳐 파일 시스템 에 저 장 됩 니 다.사용자 가 로그 인 할 때 시스템 은 사용자 가 입력 한 암 호 를 MD5 Hash 연산 한 다음 에 파일 시스템 에 저 장 된 MD5 값 과 비교 하여 입력 한 암호 가 정확 한 지 확인 합 니 다.이러한 절 차 를 통 해 시스템 은 사용자 암호 의 명시 코드 를 모 르 는 상황 에서 사용자 로그 인 시스템 의 합 법성 을 확인 할 수 있다.이것 은 사용자 의 암호 가 시스템 관리자 권한 을 가 진 사용자 에 게 알려 지 는 것 을 피 할 수 있다.MD5 는 임의의 길이 의'바이트 문자열'을 128 bit 의 큰 정수 로 표시 하고 이 128 bit 를 통 해 원본 문자열 을 반추 하 는 것 은 매우 어렵다.
SHA
SHA(Secure Hash Algorithm,보안 해시 알고리즘),디지털 서명 등 암호학 응용 에서 중요 한 도구 로 전자상거래 등 정보 보안 분야 에 널리 활용 된다.SHA 와 MD5 는 충돌 법 을 통 해 모두 해 제 됐 지만 SHA 는 여전히 공 인 된 안전 암호 화 알고리즘 으로 MD5 보다 안전 하 다.
SHA 가 정의 하 는 길이
다음 표 의 중계 해시 값(internal state)은 모든 데이터 블록 압축 해시 후의 중계 값(internal hash sum)을 표시 합 니 다.
알고리즘
출력 산열 값 길이(bits)
중계 산열 값 길이(bits)
데이터 블록 길이(bits)
최대 입력 메시지 길이(bits)
Word 길이(bits)
순환 횟수
사용 한 연산 자
충돌 공격
SHA-0
160
160
512
264 − 1
32
80
+,and,or,xor,rotl
예.
SHA-1
160
160
512
264 − 1
32
80
+,and,or,xor,rotl
263 의 공격 이 존재 합 니 다.
SHA-256/224
256/224
256
512
264 − 1
32
64
+,and,or,xor,shr,rotr
아직 나타 나 지 않 았 다
SHA-512/384
512/384
512
1024
2128 − 1
64
80
+,and,or,xor,shr,rotr
아직 나타 나 지 않 았 다
HMAC
HMAC(Hash Message Authentication Code),해시 메시지 감별 코드,키 기반 Hash 알고리즘 인증 프로 토 콜.메시지 감별 코드 가 감별 을 실현 하 는 원 리 는 공개 함수 와 키 로 고정된 길이 의 값 을 만들어 인증 표지 로 하고 이 표지 로 메시지 의 완전 성 을 감별 하 는 것 이다.키 를 사용 하여 고정 크기 의 작은 데이터 블록,즉 MAC 를 만 들 고 메시지 에 추가 한 다음 전송 합 니 다.수신 자 는 발송 자 와 공유 하 는 키 를 이용 하여 감별 인증 등 을 한다.
자바 예제
package com.zzj.encryption;
import java.security.MessageDigest;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
/**
* ( )
* @author lenovo
*
*/
public class OneWayEncryption {
static final String ALGORITHM_MD5 = "MD5";
static final String ALGORITHM_SHA = "SHA";
/**
* MAC
* <pre>
* HmacMD5
* HmacSHA1
* HmacSHA256
* HmacSHA384
* HmacSHA512
* </pre>
*/
static final String ALGORITHM_MAC = "HmacMD5";
/** **/
static final String MAC_KEY = "abcdef";
public static void main(String[] args) throws Exception {
String source = " ! !";
// MD5
printBase64(encryptionMD5(source));
// SHA
printBase64(encryptionSHA(source));
// HMAC
printBase64(encryptionHMAC(source));
}
static void printBase64(byte[] out) throws Exception {
System.out.println(encodeBase64(out));
}
/**
* MD5
* @param source
* @return
* @throws Exception
*/
static byte[] encryptionMD5(String source) throws Exception {
MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
md.update(source.getBytes("UTF-8"));
return md.digest();
}
/**
* SHA
* @param source
* @return
* @throws Exception
*/
static byte[] encryptionSHA(String source) throws Exception {
MessageDigest md = MessageDigest.getInstance(ALGORITHM_SHA);
md.update(source.getBytes("UTF-8"));
return md.digest();
}
/**
* HMAC
* @return
* @throws Exception
*/
static byte[] encryptionHMAC(String source) throws Exception {
SecretKey secretKey = new SecretKeySpec(MAC_KEY.getBytes("UTF-8"), ALGORITHM_MAC);
Mac mac = Mac.getInstance(ALGORITHM_MAC);
mac.init(secretKey);
mac.update(source.getBytes("UTF-8"));
return mac.doFinal();
}
/**
* base64
* @param source
* @return
* @throws Exception
*/
static String encodeBase64(byte[] source) throws Exception{
return new String(Base64.encodeBase64(source), "UTF-8");
}
}
결과:
1cNbZhnhFsFV3BFPLA71wA==
kl5KI61Xq44E/SzSPa2sUntMAEc=
JF2v/u9td5l8yGAImNvTZw==
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바를 잡아버려 (1)나의 생각을 적고 복습을 해버릴 것 이다 책을 펼치자 마자 나오는 설명인데 그 안의 내용을 실행하게 된다 라고 설명을 해준다 아래 소스코드와 실행 결과로 위에 설명을 보충해준다 사칙연산과 나머지를 계산하는 것 비교연...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.