본문

SHA-1 알고리즘 로직(JAVA)

반응형

# SHA-1

SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다. 

그중에서 SHA-1은 SHA 함수들 중 가장 많이 쓰인다


# 특징

해시 함수의 가장 기본적인 성질은 두 해시 값이 다르다면 원래의 데이터도 다르다는 것
  (
원래 입력의 한 비트만 바뀌더라도 해시 함수의 성질로 인해 해시 값은 크게 달라진다. )

- 해시 함수의 특성이 원래의 문장을 복호화할 수 없음

- 함수의 결과물은 고정된 길이의 숫자
  (예컨대 1기가바이트짜리 데이터도 SHA-1해시함수에 넣으면고작 16진수 40자리수의 해쉬값으로 변환된다.) 


# 크기 비교 (출처 : 위키백과)

다음은 SHA 함수들의 특성을 요약한 표이다.

알고리즘해시값 크기내부 상태 크기블록 크기길이 한계워드 크기과정 수사용되는 연산충돌
SHA-0160160512643280+,and,or,xor,rotl발견됨
SHA-1160160512643280+,and,or,xor,rotl공격법만 존재
SHA-256/224256/224256512643264+,and,or,xor,shr,rotr-
SHA-512/384512/38451210241286480+,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+ 0x10016).substring(1));
        }
        
        return stringBuffer.toString();
    }
}
 
cs


Result)
1
2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
cs





반응형

공유

댓글