안녕하세요. 명월입니다.
이 글은 Python에서 Hash 암호화 md5와 바이너리 구조체 base64를 다루는 방법에 대한 글입니다.
md5
프로그램을 다루다 보면 데이터를 암호화해서 다루어 할 때가 많이 있습니다. 대표적인게 패스워드가 있겠습니다.
이 패스워드는 노출이 되면 안되는 것으로 데이터 베이스를 관리하는 개발자의 경우도 그 값을 확인해서는 안됩니다. 그러기 위해서는 복호화가 불가능한 데이터를 다루어야 하는데 그것이 md5입니다.
Python으로도 웹 환경을 만들 수 있으니 필요하지만 그것보다 Python은 미들 웨어의 성격으로도 많이 사용되니 프로그램 간에 송수신할 때 사용할 수도 있습니다.
# 해쉬 모듈
import hashlib;
# 문자 입력
text = 'nowonbun';
# utf8형식의 binary로 변환
binary = text.encode('utf-8');
# hash 모듈에서 md5를 취득
enc = hashlib.md5();
# binary를 입력
enc.update(binary);
# md5 데이터를 취득
ret = enc.hexdigest();
# 콘솔 출력
print(ret);
md5의 암호화된 코드는 복호화가 되지 않습니다. 패스워드등으로 사용하려면 이 암호화된 코드를 비교해서 사용하면 됩니다.
참조 - https://docs.python.org/3/library/hashlib.html
base64
base64의 경우는 바이너리 데이터를 ascii코드로 변환하는 것입니다. 작게는 유니코드로 되어 있는 텍스트 데이터에서 image 데이터까지 base64로 변환이 가능합니다.
# base64 모듈
import base64;
# 이미지를 읽어온다.
with open("c:\\python\\nowonbuntistory.png", "rb") as handle:
# 바이너리로 변환한다.
binary = handle.read();
# 바이너리 데이터를 base64로 암호화 한다.
data = base64.b64encode(binary);
# base64로 변환된 데이터를 출력한다.
with open("c:\\python\\base64.txt", "wb") as handle:
handle.write(data);
저는 위의 이미지를 가져와서 base64로 변환하는 것입니다.
binary가 꽤 크기 때문에 콘솔 출력보다는 파일로 출력했습니다.
이미지 형식의 데이터를 base64 암호화하여 ascii코드로 된 String 데이터로 출력이 되었습니다.
다시 이 텍스트 데이터를 읽어서 base64 복호화를 해서 Image로 출력하겠습니다.
# base64 모듈
import base64;
# base64코드 텍스트를 읽어온다.
with open("c:\\python\\base64.txt", "rb") as handle:
# binary 형식으로 읽어온다.
data = handle.read();
# binary 데이터를 base64로 복호화 한다.
image = base64.b64decode(data);
# binary타입으로 파일를 작성한다.
with open("c:\\python\\result.png", "wb") as handle:
# 파일 작성
handle.write(image);
result.png 파일로 변환했습니다.
결과를 확인하면 result.png 파일로 작성된 것을 확인할 수 있습니다.
참조 - https://docs.python.org/3/library/base64.html
여기까지 Python에서 Hash 암호화 md5와 바이너리 구조체 base64를 다루는 방법에 대한 글이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Development note > Python' 카테고리의 다른 글
[Python] Redis 데이터베이스를 접속해서 사용하는 방법 (0) | 2022.02.21 |
---|---|
[Python] 웹소켓을 이용해서 웹 페이지에서 파일 업로드하는 방법 (0) | 2020.03.27 |
[Python] wsgi를 이용해서 apache에 웹 서버를 구축하는 방법 (0) | 2020.02.21 |
[Python] FTP에 접속하여 파일 다운로드, 업로드하는 방법(ftplib) (0) | 2020.02.19 |
[Python] 웹 서버를 구축하는 방법(bottle 모듈) (0) | 2020.02.17 |
[Python] Html 및 XML에서 데이터를 가져오는 모듈(Beautiful Soup) (0) | 2020.02.12 |
[Python] byte 타입을 다루는 방법(bytearray, struct 모듈) (0) | 2020.02.06 |
[Python] Selenium 라이브러리 (자동 웹 테스팅, 스크래핑) (0) | 2020.02.05 |