這下面的代碼是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
Cryptography名稱空間中的名稱中包含「CryptoServiceProvider」的類取決於CAPI(操作系統提供的可安裝組件)。所以沒有安裝它是第一個基本的故障模式。 XP還可以追溯到美國政府對加密軟件實施出口限制的時代,只讓美國居民獲得更高級的密碼。 SO用戶應該完成他們的檔案以獲得有效的幫助。考慮使用純管理提供程序,如SHA512Managed。 –
謝謝先生,所以我可以使用'如果Environment.OSVersion.Version.Major <= 5然後'使用SHA1Managed別的SHA1CryptoServiceProvider ..我是正確的 – DVELPR
很難猜測,你還沒有解釋爲什麼你更喜歡CSP,爲什麼它突然沒問題,不要在舊機器上使用它。這不是隨機選擇,有些用戶要求使用經過認證的算法。與您的用戶交談。不要忘記提到CAPI安裝要求。 –