2017-09-01 5 views
1

ce code ci-dessous est très bien fonctionné dans Windows 8.1 et 10 et testé dans windows xp SP3 il ne fonctionne pas et renvoie la valeur nulle et aussi même problème dans sha1, sha384 mais MD5 fonctionne bien et obtenir la sortie de retour mais d'autres ne pouvaient pas , -t windows xp sp3 support des fonctions de somme de contrôle sha ou besoin des codes spéciaux (désolé pour le pauvre anglais)Sha256, Sha384, Sha512 ne fonctionne pas dans 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

Les classes de l'espace de noms Cryptographie dont le nom contient «CryptoServiceProvider» dépendent d'un CAPI, un composant installable fourni par le système d'exploitation. Donc, ne pas l'avoir installé est le premier mode de défaillance de base. XP remonte également à une époque où le gouvernement des États-Unis imposait des restrictions à l'exportation sur les logiciels cryptographiques, ce qui ne donnait aux résidents des États-Unis que l'accès aux chiffrements plus avancés. Les utilisateurs de SO doivent compléter leur profil pour obtenir une aide efficace. Envisagez d'utiliser les fournisseurs gérés purs, comme SHA512Managed. –

+0

merci monsieur, alors je peux utiliser 'si Environment.OSVersion.Version.Major <= 5 Then' utilisé SHA1Managed autre SHA1CryptoServiceProvider .. suis-je correct – DVELPR

+0

Difficile à deviner, vous n'avez pas expliqué du tout pourquoi vous préférez CSP et pourquoi il soudainement serait correct de ne pas l'utiliser sur une vieille machine. Ce n'est pas un choix aléatoire, certains utilisateurs exigent l'utilisation d'un algorithme certifié. Parlez à vos utilisateurs. N'oubliez pas de mentionner l'exigence d'installation CAPI pendant que vous faites. –

Répondre

1

Après avoir lu certains documents, il semble que windows XP SP3 ne peut pas obtenir des certificats si elle est chiffrée à l'aide d'un SHA256/384/512 cryptage. (Link)

Veuillez noter que Windows XP est not supporté par Microsoft, ce qui signifie que le développement de la plate-forme pourrait être dangerous.

Si vous -do- voulez continuer le développement. Vous pouvez essayer de le correctif se trouve sur la page this, qui consiste à installer une dll officielle de Microsoft, sorti en 2009.

0

finalement je suis arrivé quelques informations sur Difference between SHA1, SHA1CryptoServiceProvider, SHA1Managed and SHA1Cng classes in .NET ...

  1. SHA1: c'est classe abstraite. Toute autre implémentation de SHA1 (SHA1CryptoServiceProvider, SHA1Managed et SHA1Cng) implémente cette classe abstraite . Pour créer une classe SHA1 concrète, utilisez SHA1.Create(). Par défaut, SHA1.Create() renvoie SHA1CryptoServiceProvider, qui est configurable. Pour configurer la mise en œuvre par défaut SHA1: http://msdn.microsoft.com/en-us/library/693aff9y.aspx
  2. SHA1CryptoServiceProvider: c'est wrapper pour non géré CryptoAPI (CAPI). Il s'agit de la norme Federal Information Processing Standard (FIPS).
  3. SHA1Managed: ceci est l'implémentation complète de SHA1 en utilisant le code géré. Ceci est entièrement géré mais pas certifié FIPS et peut être plus lent.
  4. SHA1Cng: il s'agit d'un wrapper pour la cryptographie non gérée Next Generation (CNG). Il s'agit d'une implémentation plus récente d'algorithmes cryptographiques par Microsoft Windows avec Windows 2008/Windows Vista ou plus récent ( ). Ceci est également certifié .