int.to_bytes 수행 시
int(bits, 2).to_bytes(bit_length
, byteorder="big").decode("utf-8")
이렇게 하긴 했는데요.
예시에서는 bit_length
대신 (bit_length + 7) // 8
을 사용하던데 이유가 있을까요? 전자처럼해도 wargame 답은 나와서요.
#웹해킹
#심화
#sql_injection
작성자 정보
답변
1
2dedce
워게임 고인물
to_bytes의 첫 번째 인자로 들어가는 숫자는 바이트 숫자입니다. 그래서 bit_length=8
이면 8비트=1바이트니까 저 자리에는 1이 들어가는 것이 맞지요. 그래서 8로 정수 나눗셈을 하는 것입니다. 그런데 그냥 나누면 bit_length=4
일 때 0이 되잖아요? 그래서 +7
을 하고 //8
을 하면 올림 나눗셈이 되서 결과로 1이 나오게 됩니다.
(bit_length + 7) // 8
은 math.ceil(bit_length / 8)
로 보셔도 됩니다. (ceil은 올림 함수이고, /
는 실수 나눗셈기호 입니다)
그냥 bit_length를 적으면 bit_length=8
인 상황에서 1바이트가 아니라 8바이트로 나오겠죠.
>>> (65).to_bytes(8, 'big')
b'\x00\x00\x00\x00\x00\x00\x00A'