반응형
Java HMAC 암호화
API개발중 받는쪽에서 HMAC SHA256를 이용하여 시그니쳐를 생성하여 헤더에 담은 후 요청
HMAC이 뭔지도 모르고 검색을 하다 알게되어 사용하는 이유, 방법정리.
HMAC(keyed-hash message authentication code, hash-based message authentication code)
암호화 해시 함수와 기밀 암호화 키를 수반하는 특정한 유형의 메시지 인증 코드(MAC)이다. 여느 MAC처럼 메시지의 데이터 무결성과 진본 확인을 동시에 수행하기 위해 사용할 수 있다. (출처 : https://ko.wikipedia.org/wiki/HMAC)
API를 통해 데이터를 주고 받을시 중간에 다른사람이 보내는사람의 메시지를 가로챈 후 변조하여 보내는것을 방지하기위해 HMAC(Key,Message) 을 사용하여 메시지의 위변조가 있었는지 체크
1. 보내는쪽은 서로 공유된 SecretKey와 Message(기존에 규약을 정함)를 기반으로 해쉬값을 생성(시그니쳐)
2. 받는쪽에서는 받은 값에서 공유되어있는 SecretKey와 Message를 이용하여 해쉬값을 생성후 비교
3. 보내는쪽 시그니쳐와 받는쪽에서 생성한 시그니쳐가 같으면 무결성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
javajavjimport javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class HMacSha256 {
public static void main(String[] args) {
String message = "ABCDEFGHIJKLMNOP";
String key = "hmacTest";
String algorithm ="HmacSHA256"; //HmacMD5,HmacSHA1,HmacSHA224,HmacSHA384,HmacSHA512
try {
System.out.println(Hmac(key,message,algorithm));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String Hmac(String key, String message, String algorithm) throws Exception {
Mac hasher = Mac.getInstance(algorithm);
hasher.init(new SecretKeySpec(key.getBytes("utf-8"), algorithm));
byte[] hash = hasher.doFinal(message.getBytes());
return Base64.encodeBase64String(hash);
}
}
|
cs |
반응형
'Java' 카테고리의 다른 글
Enum equals , == (0) | 2024.04.11 |
---|---|
Mac Java 버전 관리 (0) | 2023.03.13 |
Windows OpenJdk 다운로드 및 설치 (0) | 2022.10.21 |
Java 상위로 예외 넘기기 throws (0) | 2022.10.14 |
List removeAll(Collection<?> c) (0) | 2021.12.03 |
댓글