Пробная двоичная строка в Python - PullRequest
2 голосов
/ 16 сентября 2011

Мне нужно преобразовать эту функцию 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;
}

1 Ответ

1 голос
/ 16 сентября 2011

Я думаю, что это нехорошо.

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

даст вам

asdf      |<-

Поскольку * означает «взять как можно больше», нет никаких оснований для дополнения.

ИМХО, вы можете просто выбросить всю строку.


Re. Ваше обновление:

Функция 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...