공부

python AES

KuroNeko_ 2018. 8. 10. 00:54
반응형

웹이나 프로그램 분석을 하는데 AES 암/복호화를 사용하는 경우가 자주 있다.

 

주로, 로그인할 때나 파일 암/복호화를 할 때 사용된다. 이외에도 많긴한데, 그거는 프로그래머 마음이니

 

python으로 간단하게 짤 수 있는데 그냥 외우기 귀찮아서 글을 올린다.

 

[PyCrypto 설치]

# python2.7
pip install PyCrypto

# python3
pip3 install pycryptodome

 

python에서 AES ECB/CBC 암/복호화할 때 밑에꺼만 살짝 수정하면 된다.

 

[ECB Mode]

from Crypto.Cipher import AES

# aes-256-ecb
BLOCK_SIZE = 32
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * bytes([BLOCK_SIZE - len(s) % BLOCK_SIZE])
unpad = lambda s: s[:-ord(s[len(s) - 1:])]

key = "keyz".ljust(BLOCK_SIZE, "\x00")

aes = AES.new(key, AES.MODE_ECB)
enc = aes.encrypt(pad("KuroNeko"))
print(unpad(aes.decrypt(enc)))

 

[CBC Mode]

from Crypto.Cipher import AES

# aes-128-cbc
BLOCK_SIZE = 16
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * bytes([BLOCK_SIZE - len(s) % BLOCK_SIZE])
unpad = lambda s: s[:-ord(s[len(s) - 1:])]

key = "keyz".ljust(BLOCK_SIZE, "\x00")
iv = "".ljust(BLOCK_SIZE, "\x00")

aes = AES.new(key, AES.MODE_CBC, IV=iv)
enc = aes.encrypt(pad("KuroNeko"))
print(unpad(aes.decrypt(iv + enc)[16:]))