파이썬의 3가지 모듈에 대해서 알아볼것이다. (hashlib, urllib, base64)


(참고) 해시랑 베이스64 에는 다음 두 코드가 반복적으로 사용되는데 

.encode('UTF-8')
.decode('UTF-8')

인코드는 문자열을 바이너리값으로, 디코드는 문자열을 UTF-8 값으로 변환시키는 과정이며 파이썬에 내장되어있는 기본 함수다.



1. hashlib

import hashlib

hashlib 는 sha1, sha224, sha256, sha384, sha512, md5 해시를 지원한다. 응답 예시를 위해 string은 'test' 를 사용하였다.

트위치에서는 sha1 과 sha256를 주로 사용한다.


* 다양한 해시를 생성하기 위해서는 다음과 같이 사용하면 된다. (특정 해시만 골라 사용해도 됨)

for i in ['sha1','sha224','sha256','sha384','sha512','md5']:
  sha = hashlib.new(i)
  sha.update(string.encode('utf8'))
  print(sha.hexdigest())

a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

768412320f7b0aa5812fce428dc4706b3cae50e02a64caa16a782249bfe8efc4b7ef1ccb126255d196047dfedf17a0a9

ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff

098f6bcd4621d373cade4e832627b4f6


* 특정 해시를 골라 사용하고 싶다면 다음 중 원하는 코드만 사용해도 된다.

print(hashlib.sha1(string.encode('utf8')).hexdigest())
print(hashlib.sha224(string.encode('utf8')).hexdigest())
print(hashlib.sha256(string.encode('utf8')).hexdigest())
print(hashlib.sha384(string.encode('utf8')).hexdigest())
print(hashlib.sha512(string.encode('utf8')).hexdigest())
print(hashlib.md5(string.encode('utf8')).hexdigest())

a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

768412320f7b0aa5812fce428dc4706b3cae50e02a64caa16a782249bfe8efc4b7ef1ccb126255d196047dfedf17a0a9

ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff

098f6bcd4621d373cade4e832627b4f6


* 본인만의 규칙으로 해시를 생성하고 싶다면 다음과 같은 함수를응용하면 된다. (인수값 바꾸면 됨)

print(hashlib.pbkdf2_hmac('sha1'string.encode('utf8'), ''.encode('utf8'), 1).hex())
print(hashlib.scrypt(password=string.encode('utf8'), salt='salt'.encode('utf8'), n=2r=1p=1maxmem=1000).hex())

9031eb99ce2e6fd8cd3ce25de7f56718bffd773b

0517396b1efe238eef72d1f7429ee0123c05b6c39a7595397c974ec4a038a9a6dfe3032692bd2bdd23af62a209e6bb17a8df89eab0e32a2e8db3f4f8cd0cab6d



2. urllib

from urllib import parse

urllib 중 url 인코딩 디코딩 과정만 알아볼것이다.


* url 인코딩

print(parse.quote('테스트'))
%ED%85%8C%EC%8A%A4%ED%8A%B8


* url 디코딩

print(parse.unquote('%ED%85%8C%EC%8A%A4%ED%8A%B8'))
테스트


url 인코딩은 url에 사용할 수 없는 문자열을 url에 사용할 수 있는 문자열로 바꾸어주는 과정이고, url 디코딩은 url 에서 사용하는 문자열을 우리가 쉽게 알아볼 수 있게 만들어 주는 과정이다.


* 응용

''.join(parse.unquote(sys.argv[1]).split('/')[2:])

레지스트리를 편집하면 브라우저 북마크로 프로그램을 실행시킬 수 있는데 인수전달을 위해 위와 같은 코드를 사용해도 된다.

예를들어 레지스트리편집기를 열어서 HKEY_CLASSES_ROOT\test\shell\open\command 디렉토리를 생성하고 test에 "URL Protocol" 문자열 추가, command 데이터에 "프로그램 주소" "%1" 변경 하면 test:// 라는 주소로 설정된 북마크로 프로그램을 실행할 수 있다. (test://abcd.efgh 라는 북마크를 실행한다면 위의 값은 abcd.efgh 라는 문자열을 반환한다.)

이를 좀더 이용하면 브라우저에서 특정 방송을 녹화하는 프로그램을 바로 실행시키게 할 수 있다.



3. base64

import base64

base64 인코딩 및 디코딩 과정을 알아볼 것이다.


*  base64 인코딩

print(base64.b64encode('https://www.naver.com/'.encode('UTF-8')).decode('UTF-8'))
aHR0cHM6Ly93d3cubmF2ZXIuY29tLw==


*  base64  디코딩

print(base64.b64decode('aHR0cHM6Ly93d3cubmF2ZXIuY29tLw=='.encode('UTF-8')).decode('UTF-8'))
https://www.naver.com/