반응형
CRC32
설명
- CRC(cyclic redundancy check)는 데이터 전송시 오류가 있는지 확인하는 체크값 계산을 위해 주로 사용한다.
- CRC는 구현하기 쉽고, 데이터 오류 검출하는데 탁월하다.
- 의도적으로 주어진 CRC 값을 갖는 다른 데이터를 만들기 쉬워 데이터 무결성 검사에서는 사용될 수 없다. (무결성 검사시 MD5 사용)
- 암호화 목적이 아니므로 다른 해시 알고리즘보다 속도가 비교적 빠르다는 특징을 갖고 있다.
코드
public class Crc32Test {
@Test
public void testCrc32() {
assertEquals(1243066710, crc32("Hello World"));
}
private long crc32(String value) {
CRC32 crc32 = new CRC32();
crc32.update(value.getBytes());
return crc32.getValue();
}
}
MD5
설명
- MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수이다.
- 단방향 해시 알고리즘(one-way-hash algorithm) 중에 하나이다.
- 단방향 해시 알고리즘은 원래 값을 알아내기(복호화가) 어렵기 때문에 암호화, 보안 영역에서 사용되어야 하는데, 1996년에 MD5의 설계상 결함이 발견되어 암호화, 보안 영역에서는 다른 알고리즘을 사용할 것을 권장한다.
- 따라서 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다.
코드
public class Md5Test {
@Test
public void testMd5() {
assertEquals("b10a8db164e0754105b7a99be72e3fe5", md5("Hello World"));
}
public String md5(String value) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(value.getBytes(StandardCharsets.UTF_8));
// 바이트배열을 16진수 문자열로 변환하여 표시
StringBuilder hexMD5hash = new StringBuilder();
for (byte b : md5.digest()) {
String hexString = String.format("%02x", b);
hexMD5hash.append(hexString);
}
return hexMD5hash.toString();
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}
SHA-256
설명
- SHA-256은 SHA(Secure Hash Algorithm) 알고리즘의 한 종류로서 256비트로 구성되며 64자리 문자열을 반환한다.
- 블록체인 영역에서 많이 채택하여 사용중인 암호화 알고리즘이다.
- MD5에 비해 비교적 안전하다.
코드
public class Sha256Test {
@Test
public void testSha256() {
assertEquals("a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e", sha256("Hello World"));
}
public String sha256(String value) {
try {
MessageDigest md5 = MessageDigest.getInstance("SHA-256");
md5.update(value.getBytes(StandardCharsets.UTF_8));
// 바이트배열을 16진수 문자열로 변환하여 표시
StringBuilder hexMD5hash = new StringBuilder();
for (byte b : md5.digest()) {
String hexString = String.format("%02x", b);
hexMD5hash.append(hexString);
}
return hexMD5hash.toString();
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}
참고
반응형
'Development > Java' 카테고리의 다른 글
[Java] JUnit5 (0) | 2021.12.08 |
---|---|
[Java] JUnit4 (0) | 2021.11.23 |
[Java] Stream (0) | 2021.09.09 |
[Java] Shell Command 실행하기 (0) | 2021.08.28 |
[Java] Date (0) | 2021.07.24 |