공부
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:]))