c# - byte-array-Größe
Bin ich mit den dll für Kryptographie(des), die geschrieben von someone.Dll schließt verschlüsseln,decyrpt Klasse,und dass Klassen mit Methoden.Des benötigt 8 Byte(64 bit) - Taste.Ich beschreibt eine Zeichenfolge für den Schlüssel.(ein Zeichen ist ein byte).Und dann Codierung Byte.
string keyText= "abcdefghsdsdfsdfsdf";
UTF8Encoding encoding = new UTF8Encoding();
byte[] keyfile = new byte[8];
keyfile = UTF8Encoding.UTF8.GetBytes(keyValue);
oben Weg,auch wenn ich das beschriebene Größe der byte-array-8,Größe der byte-array-überlauf,es s wurde die Länge der string-Wert.
Jede Anregung.
Danke.
- Sollte man das nicht
new byte[8]
, nicht 7? - DES hat die bekannten Schwachstellen. Verwenden Sie es nicht. Nutzen Sie auch
System.Security.Cryptography
. - Es gibt keine Notwendigkeit zu initialisieren keyfile auf eine leere byte array.
GetBytes
gibt ein neues byte-array. - seine 8 schrieb ich falsch, sorry,@SLaks schreib ich lieber mein code,aber ich habe zu verwenden dll.
- Ok. Ich gelöscht meine Antwort (da es falsch war, auf mehr als einem Konto) marcelos Antwort ist die, die man anschauen sollte.
- für die Mühe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es zu tun richtig, Blick auf die Klasse PasswordDeriveBytes, und wählen Sie einen der überladenen Methoden.
Ja, Sie auswählen müssen ein Salz, aber das kann einen festen Wert fest in Ihr Programm. Ein Salt muss nicht geheim gehalten werden.
Zu beantworten und die technische, nicht die Sicherheit Frage:
Dieser code erstellt 2 arrays. Der erste ist 8 bytes, aber es wird sofort verworfen.
GetBytes()
eine neue erstellt mit einer Größe, die es bestimmt. Sie müssen, hash, array und dann kannst du die ersten 8 der hash, das ist, was PasswordDeriveBytes für Sie tut.System.Security.Cryptography
. Wenn es notwendig ist, um Daten zu verschlüsseln, ist es notwendig, das richtige zu tun. Überprüfen Sie SLaks' Antwort auf den OP - (DES ist gebrochen und wird nicht empfohlen).Gibt es keinen Punkt in der Initialisierung keyfile auf eine leere byte array. GetBytes gibt ein neues byte-array, das ersetzt die erste, und es wird so groß wie nötig, um zu Kodieren, die gesamte Eingabe.
Bekommen nur acht bytes der Kodierung, warum nicht Sie nur liefern die ersten acht Zeichen? Sie sind alle ASCII -, so werden Sie besetzen eine byte:
Mehr auf den Punkt, wenn Sie keyText, wie ein Passwort, um die Verbindung zwischen einem encryption key, dies ist eine wirklich schlechte Idee. Sie sind einfach zu verwerfen jedes Passwort-Zeichen nach den ersten acht. Verwenden Sie stattdessen eine form von kryptographischen hash umwandeln Passwörter in die Tasten. Ich habe gerade festgestellt Henk Holterman Antwort Punkte, um eine entsprechende API.
Haben Sie erstellt ein array mit 7 Elementen (nicht 8), aber Sie sind nicht mit diesem array überhaupt. Die
GetBytes
Methode gibt ein neues array zurück, und Sie setzen den Verweis auf das array in die variable, verlassen Sie das array, das Sie erstellt haben, auf den garbage collector.Wenn Sie möchten, um die ersten 8 bytes des array, kopieren Sie den Inhalt anstatt Sie zu ersetzen das array:
GetBytes
gibt.Encoding.GetString
Methode. Sie müssten etwas völlig anderes tun, als ob man einen hash-code für die Zeichenfolge und die ersten 8 bytes der hash-code.