2016-09-23 8 views
1

일부 바이트를 차단 문자열로 바이트을 연결. 우리는 15 바이트의 키를 받았으며, 첫 번째 바이트를 통해 실행되는 이미지를 해독하는 것은 우리의 일입니다.파이썬 - 나는 AES 암호와 파이썬을 사용하여 이미지 파일의 암호를 해독하기 위해 노력하고있어 문자열

과 내가 지금까지있는 것은 :

fifteenbytes = b'\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c' 

for i in range(0, 256): 
    ipack = pack('B', i) 

    key = ipack + fifteenbytes 
나는 내가 좋아하는 무언가로 키를 받고있을 거라고 기대했다

:

\x00\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c 
반복 0

-255,하지만 난 끝낼 :

b'\x00~\x15\x16(\xae\xd2\xa6\xab\xf7\x15\x88\t\xcfO<' 
때로는

또는 종료 문자와 ASCII 값과 같은 :

이런 일이 발생하는 이유
b'\t~\x15\x16(\xae\xd2\xa6\xab\xf7\x15\x88\t\xcfO<' 
b'%~\x15\x16(\xae\xd2\xa6\xab\xf7\x15\x88\t\xcfO<' 

사람 설명시겠습니까?

+0

이 * 일반 *입니다. '\ xhh'이스케이프 시퀀스를 사용하는 대신 인쇄 가능한 ASCII 문자로 파이썬 바이트 객체가 표시됩니다 (가능한 경우). * 여기에 데이터가 손실되지 않습니다. * 읽을 수있는 텍스트쪽으로 기울어 진 디버깅 출력을보고 있습니다. –

+0

예를 들어, 7E 바이트는 ASCII 표준의'~'문자이며 인쇄 가능한 문자이므로'repr()'출력은'\ x7E '대신'~'를 사용합니다. 이것은 데이터를 ASCII 텍스트로 계속 번역 할 필요가 없으므로 데이터가 주로 텍스트 일 ​​때 유용합니다. –

+0

@MartijnPieters, 알겠습니다, 감사합니다! 그렇다면 7E 또는 ~을 사용하여 암호에 키를 입력하면 동일한 출력을 얻을 수 있습니까? –

답변

1

올바른 출력을 얻었지만 bytes 값의 repr() 출력과 혼동스러워 보입니다.

파이썬은 당신에게 안전하게 복사하고 다시 파이썬 세션으로 붙여 넣을 수있는 값을 제공합니다. 이것은 디버깅을 돕습니다. 이 디스플레이는 가능한 경우 ASCII 인쇄 가능 텍스트를 사용하여 값을 나타내지 만 표시된 값으로 값을 정확히 재현 할 수 있습니다.

>>> output = b'\x00\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c' 
>>> output 
b'\x00~\x15\x16(\xae\xd2\xa6\xab\xf7\x15\x88\t\xcfO<' 
>>> output == b'\x00\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c' 
True 

bytestring 16 바이트 여전히 : 파이썬 대신 \xhh 바이트 값의 사람들을 보여줍니다 있도록

여러분의 기대 값 b'\x00\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c'는 인쇄 가능한 몇 가지 ASCII 문자가 포함

>>> len(output) 
16 

을 그

>>> output[1] 
126 
>>> hex(output[1]) 
'0x7e' 
: ~는 16 진수 ASCII 코드 포인트 (126), 또는 0x7E가있다 1,515,는

동일 \x28(, \x09\t (탭 문자 이스케이프 시퀀스) 및 O\x4f\x3c< 적용된다.

\xhh 이스케이프 시퀀스는 주어진 바이트 값을 정의하는 리터럴 bytes 객체 단지 표기법,하지만 당신은 ~과 동일한 값을 생성 할 수 있습니다. \t에 대한 동감, 당신은 \x09로 같은 값을 표현할 수 있지만, 파이썬은 표현을 보여주는 때 \t 순서를 사용하여 선호한다.