Я думаю, что это нехорошо.
$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'