2011-09-16 4 views
2

이 PHP 함수를 파이썬으로 변환해야하지만, 스페이스 바운딩 된 이진 문자열은 무엇인지 모르겠습니다.파이썬에서 채워진 스페이스 바 이패스 문자열

pack('A*', $string); 

파이썬에는 struct.pack에 아마도 사용해야하는 것이 있지만 여기에서 끝납니다. 누군가가 나를 도와주고 그 행동을 설명 할 수 있습니까?

감사합니다.


UPDATE :

이 내가 파이썬에서 구현해야하는 전체 코드입니다. 지금까지 내가 팩에 대해 들어 본 적이() 그래서 나는 정확히 내가 파이썬에서 그것을 할 수 있습니다 무엇을 이해하려고 노력하고 있어요 :

function getSIGN($PID, $ID, $DESC, $PRICE, $URL, $EMAIL, $PWD) { 
    $bHash = pack('A*', $PID . $ID . $DESC . $PRICE . $URL . $EMAIL); 
    $bPWD = pack('A*', $PWD); 
    $SIGN = strtoupper(hash_hmac('sha256', $bHash, $bPWD, false)); 
    return $SIGN; 
} 
+0

일례 입력이 함수 호출 복귀 무엇 ??? – rocksportrocker

답변

1

나는 그 아무것도 실행라고 생각합니다. * 패드에 대한 이유가 결코 없다 "가능한 한 많은 취할"를 의미하기 때문에

$string = 'asdf'; 
print pack('A10', $string) . "|<-\n"; 

당신에게

asdf  |<- 

을 줄 것입니다.

IMHO 그냥 전체 줄을 버릴 수 있습니다.


. 업데이트 :

pack 함수는 문자열이 아닌 모든 인수를 암시 적으로 문자열로 변환하는 경우를 제외하고는 여전히 용도가 없습니다.

다음은 Python에서 사용하는 방법입니다. 필자는 매개 변수의 순서를 변경하기 위해 자유를 택했기 때문에 매개 변수 패킹 (문자열 패킹과 같은 것은 아닙니다)을 사용할 수 있습니다.

import hmac, hashlib 

def get_sign(key, *data): 
    msg = ''.join(str(item) for item in data) 
    h = hmac.new(key, msg, hashlib.sha256) 
    return h.hexdigest().upper() 

PHP :

$ print getSIGN(1234, 456, "foo", '123.45', 'http://example.com', '[email protected]', 'blah'); 
7FA608240FA2DC04F15DB2CDB58C83F4ED6C28C5C5B4063C5A7605F9D69F170B 

파이썬 :

In [12]: get_sign('blah', 1234, 456, "foo", '123.45', 
        'http://example.com', '[email protected]') 
Out[12]: '7FA608240FA2DC04F15DB2CDB58C83F4ED6C28C5C5B4063C5A7605F9D69F170B' 
+0

고마워, 정상적인 문자열을 사용할 수 있고 결과가 같아 보인다. – Bruce

+0

@ 브루스 : 아니요, 이해하지 못했습니다. 여기에 "일반"문자열 이외의 다른 유형은 없습니다. – hop

관련 문제