-->

[파이썬] 바이트 문자열을 바이트배열(byte array)로 변경

 

바이트 문자열을 그대로 바이트배열로 변경하려면?

예를들어 '020b16011710' 문자열이 있다고 해보자.

 

이걸 \x02\x0b\x10\x01... 이렇게 바꾸고 싶은게 아니라 (hex(16)=\x10), 그대로 \x02\x0b\x16... 로 변경해 무언가 바이트 연산을 하고싶을 때가 있다.

 

020b16011710 -> \x02\x0b\x10\x01\x11\xa (X)
020b16011710 -> \x02\x0b\x16\x01\x17\x10 (O)

 

 

바이트 문자열을 bytearray로 변경한 후 연산 작업 수행하기

그러기 위해선 두글자씩 띄어준 후(이게 한바이트가 되겠지) 이걸 bytearray로 변경해주면 된다. 먼저 for문과 join을 사용해 두글자씩 띄어준다. 그럼 '02 0b 16 01 17 10'의 형태가 된다.

 

>>> data = b'020b16011710'
>>> arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
>>> arr_data
'02 0b 16 01 17 10'

 

 

이걸 bytearray.fromhex() 처리를 해주면 b'\x02\x0b\x16\x01\x17\x10' 가 나온다.

 

>>> b_arr = bytearray.fromhex(arr_data)
>>> b_arr
bytearray(b'\x02\x0b\x16\x01\x17\x10')

 

그리고나서 원하는 작업을 처리하면 되는데, 예를들어 0x64와 xor을 수행해주는 코드는 아래와 같다.

 

data = b'020b16011710'
key = 0x64

arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
b_arr = bytearray.fromhex(arr_data)

for x in b_arr:
    re = x^key
    print(hex(re),chr(re))

 

 

보통 data가 상당히 클테니까, 아래는 입출력 버전이다!

data = open("C:\\Users\\leefo\\Desktop\\en_data.txt","rt").read()
key = 0x64

arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
b_arr = bytearray.fromhex(arr_data)

re = ''
for x in b_arr:
    tmp = x^key
    re += chr(tmp)

f = open("C:\\Users\\leefo\\Desktop\\de_data.txt","w")
f.write(re)
f.close()

 

댓글

Designed by JB FACTORY