簡體   English   中英

Python包到PHP包

[英]Python pack to PHP pack

我正在嘗試將Python腳本轉換為PHP。 但是我無法正確設置格式。

蟒蛇:

print(hashlib.sha1(struct.pack('L', 1)).hexdigest()) 

輸出:

3da89ee273be13437e7ecf760f3fbd4dc0e8d1fe

PHP:

echo sha1(pack('L', 1));

輸出:

3c585604e87f855973731fea83e21fab9392d2fc

有人可以指出正確的方向,以便在兩種語言中獲得相同的輸出嗎?

之所以發生差異,是因為整數大小不同。 php版本的pack()中的L使用硬編碼的32位整數,而Python默認情況下使用機器整數大小。 如果您使用的是64位系統,則會注意到其中的區別。 (如問題所示)

您需要在python中使用=來標准化匹配度大小:

print(hashlib.sha1(struct.pack('=L', 1)).hexdigest())

輸出:

3c585604e87f855973731fea83e21fab9392d2fc

請參考此文檔:

這似乎是32位和64位問題。 您是否正在運行64位版本的Python?

請注意,根據Python文檔L是“無符號長”。 由於您未指定字節順序,大小和對齊字符,因此Python將默認為native 在Linux上,這意味着64位為8個字節,而32位為4個字節。

始終最好告訴Python使用二進制數據時的確切含義:

  • <用於小端,標准尺寸,或
  • >對於大端,標准大小。

這將消除任何差異,具體取決於您所運行的計算機類型。

此示例表明您可能正在使用64位版本的python,如L == Q (64位)。

>>> print(hashlib.sha1(struct.pack('<I', 1)).hexdigest())
3c585604e87f855973731fea83e21fab9392d2fc

>>> print(hashlib.sha1(struct.pack('<Q', 1)).hexdigest())
3da89ee273be13437e7ecf760f3fbd4dc0e8d1fe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM