2009-08-04 53 views
1

如何在FIPS兼容的WinXP SP2盒子上使用C#來唯一地散列給定文件的內容?我不關心性能(還?)。WinXP上符合FIPS標準的HashAlgorithm?

希望有人可以指出「規則」的例外,但似乎「* ServiceProvider」類符合FIPS並在WinXP上不可用,而「*託管」類在WinXP上可用,而不是FIPS兼容。

而MD5因爲它不可靠唯一(是的,即使這個小的可能性對我的項目來說是不可接受的)。

+0

沒有散列算法是可靠唯一的。根據[pigeonhole原理](http://en.wikipedia.org/wiki/Pigeonhole_principle),您無法使用固定長度哈希來唯一地表示任何長度的所有可能文件。 – 2012-11-13 22:39:21

回答

2

如果你需要的是不會跳閘任何錯誤散列供應商時, Windows機器在打開的註冊表中具有符合FIPS的策略設置,則可以使用符合FIPS且僅需要.Net 2.0和XP SP2的SHA1CryptoServiceProvider。但是 - 如果您出於安全和策略的原因實際上需要真正的符合FIPS的實現,那麼簡短的答案是要麼將客戶端升級到Win XP SP3(或更新的操作系統),要麼使用第三方服務器第三方FIPS驗證的加密服務提供商(CSP)。

儘管Win XP SP2支持符合FIPS標準的SHA1(SHACryptoServiceProvider)實現,它將以FIPS兼容模式(註冊表設置)工作,但SHA1不應在2010年後用於新實現,並且可能不再符合FIPS全部取決於使用情況(即用於隨機數生成與哈希)。

如果您至少可以使用XP SP3,則可以使用符合FIPS的SHA256CryptoServiceProvider或SHA512CryptoServiceProvider。