我有一個簡單的web表單,它託管在CF 8上,併發布到服務器外的付款處理網站。支付處理器要求對多個值進行加密並將其置於隱藏字段中,以將我確認爲用戶。在他們的文檔中,他們展示瞭如何在PHP,ASP和JSP中完成這項工作。將ColdFusion字符串轉爲十六進制到SHA-2 - 沒有正確加密
他們的PHP實例
function createHash($chargetotal) {
global $storename, $sharedSecret;
$str = $storename . getDateTime() . $chargetotal . $sharedSecret;
for ($i = 0; $i < strlen($str); $i++) {
$hex_str.=dechex(ord($str[$i]));
}
return hash('sha256', $hex_str);
}
<input type='hidden' value='<? $hash=createHash(80.00); echo "$hash"; ?>'>
我的ColdFusion
txndatetime = DateFormat(now(),'yyyy:mm:dd') & '-' & DateFormat(now(),'HH:mm:ss');
function createHash(chargetotal, txndatetime) {
var str = application.storename & txndatetime & chargetotal & application.sharedsecret;
var hex_str = binaryEncode(charsetDecode(str, "utf-8"), "hex") ;
return hash(hex_str, "SHA-256");
}
<input type='hidden' value='#createHash(80.00,txndatetime)#'>
任何人都可以發現任何明顯的差異?我的散列與付款網站所期望的不一樣。我會驚訝(有點)如果CF的哈希函數產生不同的結果作爲PHP哈希函數...也許我得到了「轉換爲十六進制」步驟錯了?也許我的日期格式不同於PHP中的getDateTime?
我很想如果我有一臺PHP服務器來測試,但我現在不在。
就像你發佈這個一樣,我得出了同樣的結論。在整個哈希周圍貼上一個lcase()後,它就起作用了。謝謝! – bwhet 2014-09-22 15:19:22
順便說一句轉換爲二進制,然後到十六進制只是我知道寫的最短的方式..但我以前嘗試循環與PHP示例相同的方式。兩種方法的輸出都是一樣的。 – bwhet 2014-09-22 15:19:55
好酷。我正處於從CF經驗學習PHP的早期階段,到目前爲止,我只是試圖對函數進行直接轉換,等等 – duncan 2014-09-22 15:20:45