python AES

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

 

'공부' 카테고리의 다른 글

[Windows Kernel Driver] 개발환경 구성  (0) 2018.11.25
유저 영역 Stack Canary 분석  (2) 2018.08.16
[IDA] C++ Class 변환  (0) 2017.08.09
[QEMU] iptime emulating  (2) 2017.07.26
[how2heap] poison_null_byte  (0) 2017.05.09
블로그 이미지

KuroNeko_

KuroNeko

,