2017-09-01 149 views
1

這下面的代碼是Windows 8.1和10個能正常工作和測試 的Windows XP SP3它不工作,並返回空值和SHA1,SHA384也 同樣的問題,但是MD5是工作的罰款,並得到返回的輸出 但其他人不能, 做的Windows XP SP3的支持SHA校驗功能 或需要任何特殊代碼(對不起,英文不好)Sha256,Sha384,Sha512不在WIndows XP中工作?

Public Function GetSha512Hash() 
    Dim _flexe$ = "" 
    Dim _result$ = "" 
    Try 
     _flexe$ = IO.Path.Combine(Application.ExecutablePath) 
     Using _sha512 As New System.Security.Cryptography.SHA512CryptoServiceProvider 
      Using stream = File.OpenRead(_flexe$) 
       Dim _hash = _sha512.ComputeHash(stream) 
       _result$ = BitConverter.ToString(_hash).Replace("-", String.Empty) 
       Trace.WriteLine(String.Format("{0}", _result$)) 
       Return _result$ 
      End Using 
     End Using 
    Catch ex As Exception 
     Trace.WriteLine(Err.Description) 
     Me.PEx = ex 
     Return _result$ 
    End Try 
End Function 

'SHa384 
Public Function GetSha384Hash() 
    Dim _flexe$ = "" 
    Dim _result$ = "" 
    Try 
     _flexe$ = IO.Path.Combine(Application.ExecutablePath) 
     Using _sha512 As New System.Security.Cryptography.SHA384CryptoServiceProvider 
      Using stream = File.OpenRead(_flexe$) 
       Dim _hash = _sha512.ComputeHash(stream) 
       _result$ = BitConverter.ToString(_hash).Replace("-", String.Empty) 
       Trace.WriteLine(String.Format("{0}", _result$)) 
       Return _result$ 
      End Using 
     End Using 
    Catch ex As Exception 
     Trace.WriteLine(Err.Description) 
     Me.PEx = ex 
     Return _result$ 
    End Try 
End Function 
+2

Cryptography名稱空間中的名稱中包含「CryptoServiceProvider」的類取決於CAPI(操作系統提供的可安裝組件)。所以沒有安裝它是第一個基本的故障模式。 XP還可以追溯到美國政府對加密軟件實施出口限制的時代,只讓美國居民獲得更高級的密碼。 SO用戶應該完成他們的檔案以獲得有效的幫助。考慮使用純管理提供程序,如SHA512Managed。 –

+0

謝謝先生,所以我可以使用'如果Environment.OSVersion.Version.Major <= 5然後'使用SHA1Managed別的SHA1CryptoServiceProvider ..我是正確的 – DVELPR

+0

很難猜測,你還沒有解釋爲什麼你更喜歡CSP,爲什麼它突然沒問題,不要在舊機器上使用它。這不是隨機選擇,有些用戶要求使用經過認證的算法。與您的用戶交談。不要忘記提到CAPI安裝要求。 –

回答

1

閱讀一些文件後,似乎如果使用SHA256加密的Windows XP SP3無法獲取證書/ 384/512加密。 (Link

請注意,Windows XP中是not不再由微軟,這意味着深化發展的平臺可能是dangerous支持。

如果你想要繼續開發。你可以嘗試在this頁面發現修補程序,其中包括安裝一個微軟官方的dll,在2009年

0

公佈最終我得到了一些Difference between SHA1, SHA1CryptoServiceProvider, SHA1Managed and SHA1Cng classes in .NET信息...

  1. SHA1:這是抽象類。 SHA1 (SHA1CryptoServiceProvider,SHA1Managed和SHA1Cng)的所有其他實現都實現此 抽象類。要創建混凝土SHA1類,請使用SHA1.Create()。 默認情況下,SHA1.Create()返回SHA1CryptoServiceProvider,它是 可配置的。配置默認的SHA1實現: http://msdn.microsoft.com/en-us/library/693aff9y.aspx
  2. SHA1CryptoServiceProvider:這是非託管的包裝器 CryptoAPI(CAPI)。這是聯邦信息處理標準 (FIPS)認證。
  3. SHA1Managed:這是使用託管的 代碼完成SHA1的實現。這是完全管理的,但沒有通過FIPS認證,可能會比較慢,因此可能是 。
  4. SHA1Cng:這是用於非託管加密下一代密碼術的封裝器(CNG) 。這些是由 Microsoft與Windows 2008/Windows Vista或更新版本的更新的加密算法的實施。這也是 FIPS認證。
相關問題