2017-12-12 30 views
1

16 진수 문자열을 ASCII로 변환하고 결과를 .der cert 형식의 파일에 저장하는 python 스크립트를 작성하려고합니다. 메모장 + 변환 플러그인을 사용하여이 작업을 수행 할 수 있지만 메모장 ++ NppConverter 플러그인을 호출하거나 파이썬 모듈을 사용하여 명령 줄에서 python 스크립트로이 변환을 수행하는 방법을 찾고 싶습니다.16 진수 문자열에서 ASCII 변환으로 오류가 있습니까?

내가 거기에 일부 길을,하지만 내 변환 ++ 메모장에서 볼 수있는 ASCII의 ouptut 동일하지 않은, 아래 메모장에서 출력 ++

enter image description here

의 조각입니다하지만 내 파이썬 변환은 약간을 표시한다 오 당신이 내 스크립트를 볼 수있는

enter image description here

아래 서로 다른 출력은 출력에서 ​​누락 문자를 일으키고, 내가 정직하면 나는 어떤 블록이 왜 모른다 검은 유선. 그러나 이러한 누락 된 블록은 첫 번째 그림과 동일한 형식으로 필요합니다.

여기에 나는 이것이 내가 출력 파일

result = bytearray.fromhex('380c2fd6172cd06d1f30').decode('ascii', 'backslashreplace') 

text_file = open("C:\Output.der", "w") 
text_file.write(result) 
text_file.close() 

모든지도에 표시 문제가 진수를 얻을 수있는 유일한 방법이기 때문에, 나는 backslashreplace 오류 제어를 사용하고 파이썬 3하고 있어요, 내 기본 코드입니다 대단히 감사하겠습니다.

+0

입력 예제를 제공 할 수 있습니까? – bla

+0

검은 색 문자는 비 ASCII 문자 (ASCII 제어 코드)와 비슷합니다. 여기에 [차트] (http://www.cpptutor.com/imgs/ascii_table.gif), – martineau

+0

주어진 출력 그림에 대한 16 진수 문자열을 포함하도록 원래 질문을 조정했습니다. 감사합니다. – MikG

답변

2

MikG, 나는 파이썬이 당신이 요구 한 바를 정확하게했다고 말할 것이다.

바이트를 문자열로 변환하고 가장 중요한 비트를 이스케이프 시퀀스 (\ xFF char 제외)로 바꿔야한다고했습니다.

문자 \ x04 (ETB)와 \ x1F (US)는 완벽하게 올바른 ASCII 문자이며 (인쇄 할 수는 없지만) 리터럴 값을 사용하여 인코딩됩니다.

문자 \ xd6 및 \ xd0은 ASCII 형식이 아닙니다. 8 비트 길이입니다. "\"(백 슬래시 문자)와 "xd6"/ "xd0"문자열

나는 DER에 좋지 않지만, 당신이 가지고 있다고 생각한다고 가정 해 봅시다. 원시 8 비트 시퀀스. 다음은이 수행 할 수있는 방법입니다 :

result = bytearray.fromhex('380c2fd6172cd06d1f30') 

with open("Output.der", "wb") as text_file: 
    text_file.write(result) 

open에 "WB"지정을 유의하시기 바랍니다 - 그것은 바이너리 IO를 할 Python을 알려줍니다.

또한 text_file이 쓰기와 관련하여 닫히는 것을 보장하기 위해 with 문도 사용했습니다.

+0

너무 가까이! 그것은 거의 솔루션과 함께, 나는 지금 NUL 블록 (다이어그램의 검은 색 블록과 유사)이 누락되었습니다. 대신 Notepad ++에서 열 때 출력에 빈 공간이 생깁니다. NUL은 원래 16 진수 문자열에 00을 추가하여 추가 할 수 있습니다. – MikG

+0

@MikG NUL 문자에 문제가 없습니다. –

+0

@MikG DER 파일을 보는 데 사용하는 텍스트 편집기의 기능입니다. 첫 번째 NUL char까지 읽습니다. 대신 16 진수 편집기를 사용하십시오. 또는 단순히 출력 파일의 크기를 확인하십시오. 나는 리눅스 파이썬 3.6에서 노력했다. –