Benötigen Sie MD5-Hash für ein in Speicher System.Drawing.ImageBenötigen Sie MD5-Hash für einen im Speicher System.Drawing.Image
Antwort
Hier ist ein einfaches Snippet. Siehe auch @ JaredReisingers Kommentar für einige Fragen.
using System.Security.Cryptography;
using System.Text;
using System.Drawing.Imaging;
// ...
// get the bytes from the image
byte[] bytes = null;
using(MemoryStream ms = new MemoryStream())
{
image.Save(ms,ImageFormat.Gif); // gif for example
bytes = ms.ToArray();
}
// hash the bytes
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hash = md5.ComputeHash(bytes);
// make a hex string of the hash for display or whatever
StringBuilder sb = new StringBuilder();
foreach (byte b in hash)
{
sb.Append(b.ToString("x2").ToLower());
}
Sollte das nicht 'foreach (Byte b in Hash) 'lesen? –
oops, danke :) –
Danke, dass du nur die Frage beantwortet hast und nicht all deine Energie ausgegeben hast, die dir Sorgen macht, warum ich es wissen muss. Ich wünschte, mehr Menschen in SO wären mehr wie du. Außerdem können Sie die StringBuilder- und foreach-Schleife vermeiden. Siehe meine Antwort. –
Eine einfache Probe, basierend auf der sample in MSDN; Beachten Sie, dass dieser Hash von der internen Darstellung des Bildes abhängt und nicht mit dem aus einer Datei erzeugten Hash übereinstimmt.
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class Program
{
static string getMd5Hash(byte[] buffer)
{
MD5 md5Hasher = MD5.Create();
byte[] data = md5Hasher.ComputeHash(buffer);
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}
static byte[] imageToByteArray(Image image)
{
MemoryStream ms = new MemoryStream();
image.Save(ms, ImageFormat.Bmp);
return ms.ToArray();
}
static void Main(string[] args)
{
Image image = Image.FromFile(@"C:\tmp\Jellyfish.jpg");
byte[] buffer = imageToByteArray(image);
string md5 = getMd5Hash(buffer);
}
}
Um die MD5
Klasse Sie einen Verweis auf System.Security
hinzufügen müssen verwenden.
Je nachdem, was Sie verwenden werden, sollte der Hash für Sie die Tatsache berücksichtigen, dass MD5 nicht mehr Stand der Technik ist und dass es bessere Hash-Funktionen gibt, wenn Sie einen starken Hash benötigen.
Ich muss sagen, das ist schön zusammengefügt .... auf que mit was die Lehrbücher auch für Prüfungsteilnehmer lehren. – IbrarMumtaz
Dank an die anderen Kollegen, die geantwortet haben. Hier ist, was ich am Ende getan habe:
MemoryStream ms = new MemoryStream()
image.Save(ms, ImageFormat.Png);
byte[] imgBytes = ms.ToArray();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hash = md5.ComputeHash(imgBytes);
string imageMD5 = BitConverter.ToString(hash).Replace("-", "").ToLower();
ms.Dispose();
- 1. Benötigen Sie einen schnellen Zufallsgenerator für C++
- 2. Benötigen Objektverweise zusätzlichen Speicher?
- 3. Benötigen Sie Primer für einen Msbuild Neuling
- 4. Wie wird md5Hash für com.google.appengine.api.blobstore.BlobInfo berechnet
- 5. So erhalten Sie die Dateigröße eines "System.Drawing.Image"
- 6. Erstellen Sie ein neues Image im Dateisystem von System.Drawing.Image?
- 7. Benötigen Sie einen Backend-Compiler
- 8. In CQRS (ereignisgesteuert) benötigen Sie einen globalen Sequenzzähler im Ereignisspeicher?
- 9. Laden Sie ein System.drawing.image auf meine Website
- 10. Benötigen Sie einen Java-Klassenlader nur für System
- 11. webpack: Für diesen Dateityp benötigen Sie möglicherweise einen geeigneten Loader
- 12. C# Novacode.Picture zu System.Drawing.Image
- 13. So erstellen Sie einen im Speicher Benutzer in SAML
- 14. benötigen Klärung MIPS Speicher in lw
- 15. Benötigen Sie einen leichten Pubsub Service/Bibliothek
- 16. Benötigen Sie die Position @ im Ergebnis
- 17. Benötigen Sie einen einfachen zusammenklappbaren Gizmo
- 18. Speicher für einen Vektor zuordnen
- 19. System.Drawing.Image Parameter nicht gültig
- 20. Benötigen Sie einen jQuery Form Deserializer
- 21. FileUpload-Steuerelement zu System.Drawing.Image
- 22. Xamarin Android System.Drawing.Image alternative
- 23. Im Speicher 'list appender' für log4j
- 24. Benötigen Sie eine Regex für Float-Werte
- 25. Behalten Sie AVAudioPlayer Sound im Speicher
- 26. Benötigen Raw Socket im Netzwerk
- 27. Benötigen Sie für jedes VBO ein VAO?
- 28. Erstellen Sie eine Zip-Datei im Speicher
- 29. Benötigen Sie für logger.isDebugEnabled schriftlichen Test helfen()
- 30. Konvertieren von System.Windows.Media.Imaging.BitmapSource zu System.Drawing.Image
Wo stecken Sie fest? Es ist relativ einfach. –
Der Titel * sagt nicht alles ... warum brauchst du einen Hash? Muss es mit dem Hash einer entsprechenden Datei auf der Festplatte identisch sein? Vermutlich werden Sie den Hash irgendwann mit etwas vergleichen ... – JaredReisinger
@Jared - http://uploadscreenshot.com/api-documentation#variables Jetzt wissen Sie, was ich weiß: Ich habe ein System.Drawing .Image im Speicher und müssen einen MD5-Hash des Image-Objekts an diese API senden. –