我需要将这个PHP函数转换为Python,但我甚至都不知道,什么是空格填充的二进制字符串。
pack('A*', $string);
Python有struct.pack应该使用什么,但我在这里结束。有人可以帮助并解释我的行为吗?
谢谢!
更新:
这是我需要在Python中实现的整个代码。到现在为止我从来没有听说过pack()所以我试图理解它到底是做什么所以我可以用Python来做:
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 :(得分:1)
我认为这是一个noop。
$string = 'asdf';
print pack('A10', $string) . "|<-\n";
会给你
asdf |<-
由于*
表示“尽可能多地接受”,因此没有任何理由可以填充。
恕我直言,你可以扔掉整条线。
重新。你的更新:
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', 'foo@example.com', 'blah');
7FA608240FA2DC04F15DB2CDB58C83F4ED6C28C5C5B4063C5A7605F9D69F170B
的Python:
In [12]: get_sign('blah', 1234, 456, "foo", '123.45',
'http://example.com', 'foo@example.com')
Out[12]: '7FA608240FA2DC04F15DB2CDB58C83F4ED6C28C5C5B4063C5A7605F9D69F170B'