2013-04-03 63 views
1

如何使用PHP的hash()函數執行以下操作?我已經嘗試和失敗(見低得多的PHP代碼)PHP hash('sha256','x')與bash命令不匹配存在問題

echo -n '807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C' | xxd -r -p | sha256sum -b 

以上的bash行給出了以下的輸出:

7DE4708EB23AB611371BB778FC0C8BDE80394AB2D8704D7129FB5771E2F1730D 

這PHP代碼並不完全做到這一點:

<?php 
echo hash('sha256', '807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C'); 

輸出:

e50f2ac6f7b6a2cbf640f44806affe06a330eb655f9e97bf70d5e09274340e4b 
+0

Yo我使用'xxd'將命令行中的十六進制字符串解碼爲二進制。但是你不會將相同的二進制字符串傳遞給PHP的hash()函數。它不會自動解碼十六進制文本。 – mario 2013-04-03 21:23:21

+0

對,我如何在PHP中做同樣的事情? – MichaelICE 2013-04-03 21:24:45

+0

'hex2bin',如果你有PHP 5.4 – Tushar 2013-04-03 21:25:22

回答

2

代碼的問題在於你錯過了xxd -r的php等價物。您可以通過使用pack("H*", $string)得到這樣的:

echo hash('sha256', pack("H*", '807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C')); 

或者,如果你有PHP 5.4或更高版本,可以使用hex2bin()

echo hash('sha256', hex2bin('807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C')); 

的輸出,這兩種是:

7de4708eb23ab611371bb778fc0c8bde80394ab2d8704d7129fb5771e2f1730d