2010-06-10 9 views
1

J'espère que quelqu'un pourrait m'aider à lire les fichiers exe en C# et en créer un hachage SHA1. J'ai essayé de lire à partir du fichier exécutable en utilisant StreamReader et BinaryReader. Ensuite, en utilisant l'algorithme SHA1 intégré, j'ai essayé de créer un hachage mais sans succès. Les résultats de l'algorithme pour StreamReader était "AEUj + Ppo5QdHoeboidah3P65N3s =" et pour BinaryReader était "rWXzn/CoLLPBWqMCE4qcE3XmUKw =". Quelqu'un peut-il m'aider à obtenir hachage SHA1 à partir du fichier exe? THX.SHA1 forme fichier .exe en C#

BTW Désolé pour mon anglais;)

+0

Lire tous les octets avec File.ReadAllBytes (chemin). Utilisez ensuite l'octet [] comme entrée pour la fonction SHA1. –

+0

@Mikael: Je ne vois aucune raison de lire le fichier entier en mémoire quand il peut être haché très facilement. –

+0

@Jon, je voudrais faire un flux personnellement, à moins que les données ont été connus pour entrer facilement dans la mémoire. –

Répondre

7

Ne pas utiliser un StreamReader - qui va essayer de convertir les données binaires opaques en texte données ... un fichier exe est pas données textuelles.

Il suffit d'utiliser un FileStream et appelez ComputeHash:

byte[] hash; 
using (Stream stream = File.OpenRead(filename)) 
{ 
    hash = SHA1.Create().ComputeHash(stream); 
} 
string base64Hash = Convert.ToBase64String(hash); 
+0

Je veux obtenir le hachage de tout processus en cours, cela ne prendrait-il pas beaucoup de temps? Existe-t-il une méthode plus rapide de calcul du hachage dans ce scénario? Merci beaucoup à l'avance – Breeze

+0

@ Hossein: Qu'entendez-vous par un processus? Voulez-vous dire le fichier exécutable d'origine? Quelle est la taille des exécutables que vous envisagez et quel type de performance est acceptable? –

+0

Merci, en cours d'exécution des processus dans Windows machine.Mostly sont des processus basés sur le système, mais il existe d'autres processus tels que les processus et les services oracle ou msSQLServer ainsi. En fait j'essaye de m'assurer que seulement une poignée de processus énumérés par blanc fonctionnent actuellement. En ce moment je rassemble toutes les 1 ms dans C# pour obtenir la liste des processus et les compare à une liste blanche. WMI est lent et pas aussi fiable car je peux manquer certains événements de processus. et sur la partie performance, j'ai besoin de quelque chose de rapide à cet égard si possible. – Breeze

0

StreamReader implémente TextReader donc nous ne sommes pas dans un monde binaire :-)