2009-07-13 8 views
0

J'ai une application de base de données qui génère un hachage MD5 et compare la valeur de hachage à une valeur dans notre DB (SQL 2K). L'application d'origine a été écrite dans Visual Studio 2003 et une version déployée a fonctionné pendant des années.MD5CryptoServiceProvider Problèmes ComputeHash entre VS 2003 et VS 2008

Récemment, certaines nouvelles machines sur .NET Framework 3.5 ont rencontré des problèmes sans rapport avec notre environnement d'exécution. Cela nous a obligé à porter notre chemin de code de Visual Studio 2003 vers Visual Studio 2008.

Depuis lors, le hachage produit par le code est différent des valeurs de la base de données.

L'appel initial à la fonction affichée dans le code est:

RemoveInvalidPasswordCharactersFromHashedPassword (Text_Scrub (GenerateMD5Hash (strPSW)))

Je cherche des conseils d'experts pour savoir si les méthodes MD5 ou non ont changé depuis VS 2K3 (provoquant ce point de défaillance), ou d'où d'autres problèmes éventuels peuvent provenir. Je réalise que ce n'est peut-être pas la meilleure méthode de hachage, mais en fin de compte, toute modification du code MD5 nous obligerait à changer quelques 300 valeurs dans notre table DB et nous coûter beaucoup de temps. En outre, j'essaie d'éviter de redéployer toutes les versions fonctionnelles de cette application.

Je suis plus qu'heureux de publier d'autres codes, y compris la fonction RemoveInvalidPasswordCharactersFromHashedPassword, ou notre Text_Scrub s'il est nécessaire de recevoir les commentaires appropriés.

Merci d'avance pour votre contribution.


Public Function GenerateMD5Hash(ByVal strInput As String) As String

Dim md5Provider As MD5 

    ' generate bytes for the input string 
    Dim inputData() As Byte = ASCIIEncoding.ASCII.GetBytes(strInput) 


    ' compute MD5 hash 
    md5Provider = New MD5CryptoServiceProvider 
    Dim hashResult() As Byte = md5Provider.ComputeHash(inputData) 

    Return ASCIIEncoding.ASCII.GetString(hashResult) 

End Function 


+0

Je sais que cela n'aide pas, mais vous devriez vraiment envisager de ne pas utiliser MD5 et passer à SHA, MD5 n'est plus considéré comme sécurisé. http://en.wikipedia.org/wiki/MD5 –

Répondre

0

Vous demandez essentiellement si la mise en œuvre MD5 en .Net 1.1 a été brisé.

Je ne pense pas. Je pense que le problème est ailleurs.

0

Je ne pense pas que le code de hachage MD5 .Net ont changé dans VisualStudio 2008.

Mais je pense que:

Return ASCIIEncoding.ASCII.GetString(hashResult) 

Vous transformez des données binaires en ASCII, et perdre des caractères, peut-être le problème est dans un nouveau pilote de base de données. Et probablement vous aurez besoin de changer vos valeurs stockées et commencer à utiliser un champ blob ou en convertissant en base64 et en utilisant un champ de texte.

0

Essayer d'être plus productif que mon commentaire ...

Vous pouvez essayer d'utiliser un algorithme de hachage md5 indépendant pour vérifier l'encodage, il y a quelques OpenSSL web based ones ou de l'utilisation.