Entwickler-Ecke

Basistechnologien - Managed Code oder Unmanaged?


Chryzler - Do 06.09.07 21:44
Titel: Managed Code oder Unmanaged?
Soo,

ich hab vor den TigerHash-Algo in .NET zu implementieren (in Delphi ist er so gut wie fertig, funktioniert trotzdem nicht ganz), dabei bin ich auf die Klasse HashAlgorithm gestoßen, von der sollte man also jeden HashAlgo ableiten. Soweit ok. Jetzt hab ich mir mal die mitgelieferten MD5 und SHA1-Implementationen angesehen, von denen es jeweils eine Unmanaged Code-Variante gib (MD5), und eine Managed Code-Variante (MD5Managed).
Welche von den beiden Klassen ist nun wann genau zu bevorzugen? Unmanaged müsste theoretisch eher schneller sein, wozu also managed? Und soll ich jetzt auch zwei TigerHash-Implementationen machen, oder reicht eine Managed Code? Bin völlig durcheinander.. :P

Chryzler


Chryzler - So 09.09.07 18:22

Niemand ne Ahnung? *push* :?


Christian S. - So 09.09.07 18:33

Bei mir gibt's im Framework nur die abstrakte MD5-Klasse, von der z.B. der MD5CryptoServiceProvider erbt.


Chryzler - So 09.09.07 21:46

user profile iconChristian S. hat folgendes geschrieben:
Bei mir gibt's im Framework nur die abstrakte MD5-Klasse, von der z.B. der MD5CryptoServiceProvider erbt.

Stimmt. :shock: Wie komm ich jetzt auf MD5Managed? Muss in irgendeinem using-Namespace deklariert gewesen sein, kanns aber momentan nicht mehr finden. *Thema erledigt* :)
Ach ja, was ist der Vorteil von MD5CryptoServiceProvider gegenüber MD5? Ich weiß, MD5 ist ne abstrakte Klasse, geht aber einwandfrei..


Christian S. - So 09.09.07 22:38

user profile iconChryzler hat folgendes geschrieben:
Ach ja, was ist der Vorteil von MD5CryptoServiceProvider gegenüber MD5? Ich weiß, MD5 ist ne abstrakte Klasse, geht aber einwandfrei..
Du instanzierst ja mit MD5.Create nicht die Klasse MD5 (nicht mit dem Delphi-Konstruktor verwechseln!), sondern das liefert IIRC auch nur einen MD5CryptoServiceProvider zurück.


Chryzler - So 09.09.07 22:40

user profile iconChristian S. hat folgendes geschrieben:
Du instanzierst ja mit MD5.Create nicht die Klasse MD5 (nicht mit dem Delphi-Konstruktor verwechseln!), sondern das liefert IIRC auch nur einen MD5CryptoServiceProvider zurück.

Aso danke.. kommt nie wieder vor! :)


Kha - Mo 10.09.07 12:42

user profile iconChryzler hat folgendes geschrieben:
*Thema erledigt* :)
Weshalb dies :gruebel: ?
Als ersten Schritt müsstest du jedenfalls einmal nachschauen, ob es diesen TigerHash in der CAPI gibt, sonst bleibt dir logischerweise sowieso nur die Managed Variante.


Chryzler - Mo 10.09.07 13:01

user profile iconKhabarakh hat folgendes geschrieben:
user profile iconChryzler hat folgendes geschrieben:
*Thema erledigt* :)
Weshalb dies :gruebel: ?
Als ersten Schritt müsstest du jedenfalls einmal nachschauen, ob es diesen TigerHash in der CAPI gibt, sonst bleibt dir logischerweise sowieso nur die Managed Variante.

CAPI? Wieso erster Schritt? Der ist ja so gut wie fertig implementiert (und geht trotzdem ned :(, und die Delphi-Implementation ging auch noch nie..). Managed ist er sowieso, ansonsten müsste man ja afaik ne extra DLL verwenden (und den ganzen DllImport-Zeug).


Kha - Mo 10.09.07 14:13

Ich bin davon ausgegangen, dass man sich das SDK durchliest, bevor man zu einer bestimmten Klasse eine Frage stellt ;) . Dann wüsstest du auch, was managed/unmanaged in diesem Fall überhaupt bedeutet.
SHA1Managed class, about hat folgendes geschrieben:
This is a purely managed implementation of SHA1 that does not wrap CAPI.

Managed = Eigene CLR-Implementierung
Unmanaged = Wrapper um einen CAPI [http://en.wikipedia.org/wiki/Cryptographic_Application_Programming_Interface]-CSP [http://en.wikipedia.org/wiki/Cryptographic_Service_Provider]


Christian S. - Mo 10.09.07 15:34

Er frugtete doch aber nach MD5Managed bzw. Unmanaged und da es die gar nicht gibt, war die Frage geklärt ;-)


Kha - Mo 10.09.07 17:00

Ja, MD5. Unter Anderem, sein zweites Beispiel SHA1 existiert nämlich wirklich in zwei Ausführungen ;) (das BCL-Team hatte wohl einfach keine Lust, so eine unsichere Hashfunktion noch einmal von Hand zu programmieren). Auch andere Verschlüsselungs-/Hash-Verfahren existieren doppelt:

Wenns also den Tiger [s]im Tank[/s][meta]Wo bist du, mein Lieblings-BB-Tag?[/meta] in der CAPI geben sollte, könnte Chryzler einmal die Performance von Managed/Unmanaged untersuchen und danach ggf. noch eine Unmanaged-Implementierung bauen. Hätte unabhängig von der Performance den Vorteil, dass die Wahrscheinlichkeit von Bugs etwas geringer einzuschätzen ist ;) .