Python/Project

SHA256을 이용한 File 무결성 확인 - 공부하는 도비

DOVISH WISDOM 2022. 11. 21. 20:30  
728x90
반응형

지난 피드에서 파이썬 SHA256이나 MD5 사용법에 대해 알아보았습니다.

2022.11.21 - [파이썬/프로젝트] - [파이썬] hashlib의 SHA 사용 - 공부하는 도비

 

[파이썬] hashlib의 SHA 사용 - 공부하는 도비

SHA는 "Secure Hash Algorithm"의 약자로 1993년 미국의 NSA가 만들고 미국 국립 표준 기술 연구소에서 표준으로 제정한 해시 함수입니다. SHA는 SHA-0, SHA-1, SHA-2, SHA-3 순으로 발전되어 왔습니다. 자세한 내

yang-wistory1009.tistory.com

2022.11.21 - [파이썬/프로젝트] - [파이썬] hashlib의 MD5 사용 - 공부하는 도비

 

[파이썬] hashlib의 MD5 사용 - 공부하는 도비

MD5는 "Message-Digest algorithm 5"의 약자로 1991년 만들어진 128bit 길이의 해시값을 출력하는 해시함수입니다. 자세한 내용은 아래 위키백과를 참고해주세요. https://ko.wikipedia.org/wiki/MD5 MD5 - 위키백과, 우

yang-wistory1009.tistory.com

 

해시함수는 파일의 무결성 확인에 사용이 됩니다. 

오늘은 두 파일(문서)에 대한 무결성 확인을 해보려고 합니다. 

 

해시 함수는 데이터의 아주 작은 부분만 달라져도 해시값이 완전히 변한다는 특징을 가지고 있기 때문에,

사람이 찾아낼 수 없는 미세한 변화도 해시 값을 통해, 파일의 위변조를 알 수 있게 됩니다. 

 

plain.txt
0.00MB
plain_modify.txt
0.00MB

plain_modify.txt 파일은 plain.txt 파일의 첫 줄 "Once when I was~~""once when I was~"로 첫 번째 알파벳만 소문자로 달라진 경우입니다. 

두 파일을 가지고 아래 코드를 실행시키면, 

from hashlib import sha256 as SHA 
SIZE = 1024*256     # 256KB 크기만큼 파일을 읽음

def getFileHash(filename):
    sha = SHA()
    h = open(filename, 'rb')
    content = h.read(SIZE)
    while content:
        sha.update(content)         # 256KB 만큼 정보를 읽고, 해시 값을 업데이트 함  
        content = h.read(SIZE)      # 파일에서 그 다음 256KB를 읽음
    h.close()

    hashval = sha.digest()          # 최종 해시값 계산
    return hashval 

def hashCheck(file1, file2):
    hashval_1 = getFileHash(file1)
    hashval_2 = getFileHash(file2)

    if hashval_1 == hashval_2:
        print("Two Files Are Same")
    else:
        print("Two Files Are Different")

if __name__ == '__main__':

    file1 = 'plain.txt'
    file2 = 'plain_modify.txt'

    hashCheck(file1, file2)

아래와 같은 결과가 나옵니다. 

원본의 데이터 값이 변경되면, 해시값도 변하게 되고

원본 데이터와 변경된 데이터의 무결성 검증을 하면, 두 파일이 다르다는 걸 알 수 있게 됩니다. 

 

만약, 같은 파일을 가지고 코드를 실행시킨다면 두 파일이 같다는 결과를 볼 수 있습니다.