Was ist der Unterschied zwischen der Verwendung von Rfc2898DeriveBytes und der Verwendung von Rfc2898DeriveBytes Encoding.ASCII.GetBytes(string object);
?
Ich habe mit beiden Ansätzen relative Erfolge erzielt, wobei der erstere ein langwierigerer Ansatz ist, bei dem der letztere einfach und auf den Punkt gebracht ist. Beide scheinen es Ihnen zu ermöglichen, irgendwann dasselbe zu tun, aber ich kämpfe darum, den Punkt zu erkennen, an dem ich Ersteres gegenüber Letzterem verwenden kann.
Das Grundkonzept, das ich verstehen konnte, ist, dass Sie String-Passwörter in Byte-Arrays konvertieren können, die beispielsweise für eine symmetrische Verschlüsselungsklasse verwendet werden AesManaged
. Über die RFC-Klasse können Sie jedoch beim Erstellen Ihres RFC-Objekts Salt-Werte und Kennwörter verwenden. Ich nehme an, es ist sicherer, aber das ist bestenfalls eine ungebildete Vermutung! Außerdem können Sie damit Byte-Arrays einer bestimmten Größe zurückgeben.
Hier sind einige Beispiele, die Ihnen zeigen, woher ich komme:
byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password");
oder
string password = "P@%5w0r]>";
byte[] saltArray = Encoding.ASCII.GetBytes("this is my salt");
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(password, saltArray);
Das Objekt 'rfcKey' kann jetzt zum Einrichten der Eigenschaften .Key oder .IV für eine symmetrische Verschlüsselungsalgorithmusklasse verwendet werden.
dh.
RijndaelManaged rj = new RijndaelManaged ();
rj.Key = rfcKey.Getbytes(rj.KeySize / 8);
rj.IV = rfcKey.Getbytes(rj.Blocksize / 8);
'rj' sollte bereit sein zu gehen!
Der verwirrende Teil ... Kann ich also nicht einfach das Array 'myPassInBytes' verwenden, um mein 'rj'-Objekt einzurichten, anstatt das' rfcKey'-Objekt zu verwenden?
Ich habe dies in VS2008 versucht und die sofortige Antwort lautet NEIN. Aber habt ihr eine besser ausgebildete Antwort darauf, warum die RFC-Klasse gegenüber der anderen Alternative verwendet wird, die ich oben erwähnt habe?