Sunday, April 08, 2007
Python 파이썬] 파일의 CRC32 값 구하기: File CRC 계산 소스
어떤 파일명을 명령행 옵션으로 지정해 주면 그 파일의 CRC-32 값을 구하여 출력하는 파이썬 스크립트입니다.
zlib.crc32() 함수를 이용합니다. 그런데 파일을 'rb' 이렇게 "읽기 전용 + 이진 파일" 모드로 열어야 합니다. 그냥 'r' 이렇게 열면, 이진파일의 경우 대부분 틀린 CRC 값이 나오게 됩니다.
이 스크립트로 계산하면, ZIP 이나 RAR 에서 계산된 CRC-32 값과 동일한 값이 나옵니다.
실행시 옵션으로 입력한 파일의 CRC-32 출력 예제
스크립트 파일명: example.py
실행 결과 화면:
파일이 아닌, 문자열의 CRC 계산: ▶▶ Python 파이썬] 문자열의 CRC32 값 구하기, String CRC 계산 함수 zlib.crc32 사용법
C언어로 구하기: ▶▶ [C언어] 비주얼C로, 파일의 CRC-32 값 구하기 (빠르고 메모리 점유 없이)
zlib.crc32() 함수를 이용합니다. 그런데 파일을 'rb' 이렇게 "읽기 전용 + 이진 파일" 모드로 열어야 합니다. 그냥 'r' 이렇게 열면, 이진파일의 경우 대부분 틀린 CRC 값이 나오게 됩니다.
이 스크립트로 계산하면, ZIP 이나 RAR 에서 계산된 CRC-32 값과 동일한 값이 나옵니다.
실행시 옵션으로 입력한 파일의 CRC-32 출력 예제
스크립트 파일명: example.py
#!/usr/bin/python
# -*- coding: cp949 -*-
# 32비트 unsigned 형으로 변환하는 함수 정의
def unsigned32(n):
return n & 0xFFFFFFFFL
# 지정한 파일의 CRC-32 값 반환 함수
import zlib
def getCRC32(filename):
try:
crc = zlib.crc32(file(filename, 'rb').read())
return unsigned32(crc)
except IOError:
print "그런 파일이 없거나, 읽기 에러입니다."
return -1 # 에러 나면 -1 (-0000001) 반환
# 본격적인 프로그램 시작
import sys
if len(sys.argv) == 1: # 옵션 없으면 도움말 출력하고 종료
print "CRC를 검사할 파일명을 입력해 주세요"
exit(1)
# CRC-32 값 출력
print "%08X" % getCRC32(sys.argv[1])
# -*- coding: cp949 -*-
# 32비트 unsigned 형으로 변환하는 함수 정의
def unsigned32(n):
return n & 0xFFFFFFFFL
# 지정한 파일의 CRC-32 값 반환 함수
import zlib
def getCRC32(filename):
try:
crc = zlib.crc32(file(filename, 'rb').read())
return unsigned32(crc)
except IOError:
print "그런 파일이 없거나, 읽기 에러입니다."
return -1 # 에러 나면 -1 (-0000001) 반환
# 본격적인 프로그램 시작
import sys
if len(sys.argv) == 1: # 옵션 없으면 도움말 출력하고 종료
print "CRC를 검사할 파일명을 입력해 주세요"
exit(1)
# CRC-32 값 출력
print "%08X" % getCRC32(sys.argv[1])
실행 결과 화면:
D:\Z>example.py
CRC를 검사할 파일명을 입력해 주세요
D:\Z>example.py game.exe
FBC6BE97
D:\Z>
CRC를 검사할 파일명을 입력해 주세요
D:\Z>example.py game.exe
FBC6BE97
D:\Z>
파일이 아닌, 문자열의 CRC 계산: ▶▶ Python 파이썬] 문자열의 CRC32 값 구하기, String CRC 계산 함수 zlib.crc32 사용법
C언어로 구하기: ▶▶ [C언어] 비주얼C로, 파일의 CRC-32 값 구하기 (빠르고 메모리 점유 없이)
tag: python
Python | 파이썬
<< Home