2012-02-23 41 views
0

我正在嘗試構建一個使用API​​密鑰進行訪問的身份驗證機制。在不同的機器上運行時,SHA256Managed Class會返回不同的結果嗎?

爲了防範中繼攻擊,我使用當前日期時間對API密鑰進行哈希處理,然後在服務器端進行檢查。

使用相同的代碼對客戶端和服務器進行哈希處理,我會從兩個調用中得到不同的結果。

I.E:客戶端哈希它的API密鑰,並將哈希鍵和日期時間「鹽」發送到服務器。

服務器將採用預期的api密鑰並使用客戶端發送的日期時間進行散列。

我的散列永遠不匹配(客戶端散列!=服務器散列)。

這隻有當我運行在單獨的機器上的客戶端和服務器(實際上是另一個開發人員試圖寫入客戶端部分)

一切正常,當我在我的本地機器上測試時(運行客戶機和服務器部分並嘗試認證)。

問題 給定相同的輸入,.NET SHA256Managed類的ComputeHash方法在不同的計算機上運行時會返回不同的結果嗎?

+1

你能提供一個可重複的例子嗎? – ken2k 2012-02-23 16:17:57

+1

創建一個隨機salt(以字節爲單位)並將其發送給服務器。我需要文本,將鹽編碼爲十六進制字符串。 – 2012-02-23 21:18:07

回答

5

給定相同的輸入,.NET SHA256Managed類的ComputeHash方法在不同的計算機上運行時會返回不同的結果嗎?

不。如果它確實比實現中斷(不太可能),或者輸入不同。如果你使用string因爲編碼,當前文化......可能不同計算機之間的不同,會給你不同的結果

1

保重(因爲輸入不同的是逐字節)。

+0

感謝您的提示。你可能救了我們一些頭痛。現在測試一些理論... – stephen776 2012-02-23 16:42:09

1

散列值應該始終相同。您的問題可能是因爲您使用日期的字符串表示法作爲salt,並且由於語言環境設置,每個計算機上的字符串表示形式都不相同。

+0

即使在同一時區/國家內,日期時間的字符串表示也不同。即我們兩個人都在美國東部(不同的州雖然) – stephen776 2012-02-23 17:57:53

+0

機器在哪裏_physically_無所謂 - 它只在他們認爲他們在哪裏。驗證系統範圍的區域設置。 – x0n 2012-02-24 19:21:53

相關問題