본문
SHA-1 알고리즘 로직(JAVA)
프로그래밍/Java 2016. 10. 18. 14:30
반응형
# SHA-1
SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다.
그중에서 SHA-1은 SHA 함수들 중 가장 많이 쓰인다
# 특징
- 해시 함수의 가장 기본적인 성질은 두 해시 값이 다르다면 원래의 데이터도 다르다는 것
(원래 입력의 한 비트만 바뀌더라도 해시 함수의 성질로 인해 해시 값은 크게 달라진다. )
- 해시 함수의 특성이 원래의 문장을 복호화할 수 없음
- 함수의 결과물은 고정된 길이의 숫자
(예컨대 1기가바이트짜리 데이터도 SHA-1해시함수에 넣으면고작 16진수 40자리수의 해쉬값으로 변환된다.)
# 크기 비교 (출처 : 위키백과)
다음은 SHA 함수들의 특성을 요약한 표이다.
알고리즘 | 해시값 크기 | 내부 상태 크기 | 블록 크기 | 길이 한계 | 워드 크기 | 과정 수 | 사용되는 연산 | 충돌 |
---|---|---|---|---|---|---|---|---|
SHA-0 | 160 | 160 | 512 | 64 | 32 | 80 | +,and,or,xor,rotl | 발견됨 |
SHA-1 | 160 | 160 | 512 | 64 | 32 | 80 | +,and,or,xor,rotl | 공격법만 존재 |
SHA-256/224 | 256/224 | 256 | 512 | 64 | 32 | 64 | +,and,or,xor,shr,rotr | - |
SHA-512/384 | 512/384 | 512 | 1024 | 128 | 64 | 80 | +,and,or,xor,shr,rotr | - |
필자는 SHA-1을 파일 송,수신시 무결성 체크에 사용하였다.
Source 01) SHA1.java
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 | package com.source.common.test; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class SHA1 { public static void main(String[] args) throws NoSuchAlgorithmException { String contents = "The quick brown fox jumps over the lazy dog"; String result; result = encryptSHA_1(contents); System.out.println(result); } public static String encryptSHA_1(String input) throws NoSuchAlgorithmException { MessageDigest mDigest = MessageDigest.getInstance("SHA1"); byte[] result = mDigest.digest(input.getBytes()); StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < result.length; i++) { stringBuffer.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); } return stringBuffer.toString(); } } | cs |
Result)
1 | 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 | cs |
반응형
댓글