2017-09-01 213 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认证。
相关问题