2014-09-22 31 views
1

我有一個簡單的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服務器來測試,但我現在不在。

回答

1

如果我這樣做在PHP中:

echo hash("sha256", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor"); 

我得到

1c3f958abd85c54905c97fe8e0628fe76495711962a27daae34033781486da00 

,這在CF:

hash("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor", "SHA-256") 

我得到

1C3F958ABD85C54905C97FE8E0628FE76495711962A27DAAE34033781486DA00 

找出差異?您的支付提供商是否進行了區分大小寫的支票?如果不是的話,那麼它就如何構建你的字符串,最終產生散列問題一定是個問題。

PHP示例接受一個字符串,循環它,獲取每個字符的ASCII十進制值,將其轉換爲十六進制。

您的CF版本接受一個字符串,將整個事物轉換爲二進制,然後轉換爲十六進制。爲什麼不使用相同的方法?當我在CF中這樣做時,我得到了相同的字符串值,最終被加密:

for (var i = 1; i <= len(str); i++) { 
    hex_str &= formatBaseN(asc(mid(str, i, 1)), 16); 
} 
+0

就像你發佈這個一樣,我得出了同樣的結論。在整個哈希周圍貼上一個lcase()後,它就起作用了。謝謝! – bwhet 2014-09-22 15:19:22

+0

順便說一句轉換爲二進制,然後到十六進制只是我知道寫的最短的方式..但我以前嘗試循環與PHP示例相同的方式。兩種方法的輸出都是一樣的。 – bwhet 2014-09-22 15:19:55

+0

好酷。我正處於從CF經驗學習PHP的早期階段,到目前爲止,我只是試圖對函數進行直接轉換,等等 – duncan 2014-09-22 15:20:45

相關問題