본문으로 바로가기

AES CBC decrypt

category 프로그래밍/Python 2019.02.26 10:08

파이썬으로 AES CBC 방식을 decrypt는 아래 코드로 간단히 구현할 수 있다.

import binascii
from Crypto.Cipher import AES

def aes_cbc_decrypt(file):
	enc_key = bytes([x for x in range(16)])
	init_vector = bytes([0x00 for _ in range(16)])

	with open(file, "rb") as f:
		encrypted_data = bytes(f.read(64))
	encrypted_string = "".join("{:02X}".format(x) for x in encrypted_data)
	print("encrypted_string : " + encrypted_string)
	
	cipher = AES.new(enc_key, AES.MODE_CBC, init_vector)
	# plaintext_data = cipher.decrypt(binascii.unhexlify(encrypted_string))
	plaintext_data = cipher.decrypt(encrypted_data)
	plaintext_string = "".join("{:02X}".format(x) for x in plaintext_data)
	print("plaintext_string : " + plaintext_string)

aes_cbc_decrypt("./DN_D-7000HD_ALI_M3529_VCNX_____S2_v550.bin")

위 코드는 DN_D-7000HD_ALI_M3529_VCNX_____S2_v550.bin 파일의 첫 64바이트 decrypt 하는 것을 나타내는 것인데, Python을 코딩하면서 가장 난해한 것이 타입의 모호성으로 매번 고생한다.


특히 C 언어를 주로 사용한 나로썬, binary data를 많이 처리하는데 이것을 파이썬 포팅하려니 데이터 타입 때문에 삽질하는 것이 부지기수다.


파이썬은 그때 그때 데이터 타입 맞게 코딩하면 된다고 하지만... 흠...

아직 파이썬이 손에 익지 않고, 개념 자체가 머리 속에 맴돌고 있는 상태인지라 모든 것이 낯설고 생소한 개념으로 느껴진다. 그렇기 때문에 삽질도 많이 하는 것 같고... ;;

'프로그래밍 > Python' 카테고리의 다른 글

Firmware header changer  (0) 2019.03.14
OTA TS Generator  (0) 2019.03.08
AES CBC decrypt  (0) 2019.02.26
List Comprehension  (0) 2019.01.17
String to Hex 변환  (0) 2019.01.13
Visual Studio Code - Python 설정  (0) 2019.01.08