繁体   English   中英

用Python空格填充的二进制字符串

[英]Space padded binary string in Python

我需要将此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;
}

我认为这是一个小问题。

$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

蟒蛇:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM