2013-11-21 7 views
2

코드 퓨리 (Code Furies)는 나에게 눈부신 눈부신 빛을 내었습니다. The Direct Project에 정의 된 "보안 전송"을 구현하는 것은 나에게 무언가가되었습니다. 우리가 인증서 공유를 위해 LDAP 대신 내부적으로 DNS를 사용하는지 여부에 관계없이, 필자는 분명히이를 테스트하기 위해 설정해야 할 것입니다. 그래서 저를 붙잡 았습니다. 분명히 X509 인증서는 CERT 레코드에 사용할 수있는 마사지가 필요하며 어떻게 처리되는지 알아 보려고합니다.Python : base64.b64decode()와 .decode?

가장 명확한 것은 Videntity's blog에있는 스크립트이지만 파이썬에 정통하지는 않습니다. 나는 걸림돌을 치고 있습니다. 대표하도록되어 '엄격한'무엇이든 그것을 좋아하는 것 같지 않기 때문에

decoded_clean_pk = clean_pk.decode('base64', strict) 

(또는 오히려, 알고) : 특히,이 선이 충돌합니다. 준 교육을 통해이 라인이 base64 데이터를 해독 할 것으로 추측하고 있지만, 데비안 OpenSSL의 실수로 몇 년 전에 암호 관련 코드로 맹목적으로 약한 것이 나쁜 것임을 알게되었습니다.

decoded_clean_pk = base64.b64decode(clean_pk) 
스크립트는 그 변경 후 실행하고,

가 다시 보정 생산 : 그 라인 (추가 적절한 가져 오기)이 하나에 의해 대체 될 수 있습니다 경우

그래서 내가 물어 SO에 걸출한 파이썬 공부 벌레를 설정 나는 본능을 믿을 수는 없다는 것을 알기에 충분한 본능을 가지고있다.

strict 그렇지 않으면 파이썬 인터프리터가 strict라는 변수를 검색하려고 할 것이다하는 string이어야 공지 것을
decoded_clean_pk = clean_pk.decode('base64', 'strict') 

과 : 당신이 좋아라고 한 것입니다 경우 :

+0

* 최종 예! *;)로 답변을 업데이트했습니다. –

답변

4

이 줄은 일을해야했습니다 찾지 못하거나 다른 값인 strict, ignorereplace이 있으면 불만을 제기했을 것입니다.

이 코드를 살펴 : .decodebase64 인수 문자열이 전달 될 때

>>>b=base64.b64encode('hello world') 
>>>b.decode('base64') 
'hello world' 

>>>base64.b64decode(b) 
'hello world' 

모두 decodeb64decode가 동일하게 작동합니다.

차이점은 str.decode은 인수로 바이트 문자열을 취하고 첫 번째 매개 변수로 전달하는 encoding 인수에 따라 유니 코드 표현을 반환한다는 것입니다. 이 경우 bas64 문자열을 처리해야하므로 괜찮습니다.

b64decode/encode은 base64 인코딩에서만 작동하고 str.decode은 라이브러리에서 인식 할 수있는 인코딩만큼 처리 할 수 ​​있지만 질문에 대답하려면 두 가지 모두 동일합니다.

자세한 내용은 문서 섹션 decodeb64decode 모두를 참조하십시오.

UPDATE : 사실, 이것은 내가 decode()이 사용한다는 것입니다 encodings/base64_codec.py의 소스 코드를 살펴 걸릴 :) 생각하는 가장 중요한 예입니다

def base64_decode(input,errors='strict'): 

    """ Decodes the object input and returns a tuple (output 
     object, length consumed). 

     input must be an object which provides the bf_getreadbuf 
     buffer slot. Python strings, buffer objects and memory 
     mapped files are examples of objects providing this slot. 

     errors defines the error handling to apply. It defaults to 
     'strict' handling which is the only currently supported 
     error handling for this codec. 

    """ 
    assert errors == 'strict' 
    output = base64.decodestring(input) 
    return (output, len(input)) 

실제로, 그것을 볼 수 있습니다로를 모듈을 사용하여 수행하십시오.

어떤 식 으로든이 질문을 명확히하기를 바랍니다.

+0

고마워요! 도움에 감사드립니다. 요즘에는 파이썬의 일을 배워야 할 것입니다. :) – GeminiDomino