Frage

a C ++ unterstützt Blowfish einen Block mit weniger als <8 Buchstaben verschlüsselt, während .NET doesn't.Why?

-> C # NET Blowfish <- -> C ++ Blowfish <-

In beiden C ++ und C # -Anwendungen, ich verschlüsseln die folgende Array

    byte response[6] = 
    {
        0x00, 0x80, 0x01, 0x61, 0x05, 0x06
    };

In beide C ++ und C # -Anwendungen, nenne ich die Encrypt-Funktion mit denselben Parametern.

C++
Blowfish.Encrypt((LPBYTE)responce + 2,(LPBYTE)responce + 2, 4);

C#
Blowfish.Encrypt(responce, 2, responce, 2, responce.Length - 2);

Allerdings In C ++ ich die Daten verschlüsselt, aber nicht in C #.

Line 45,47 und 49 in C # NET Blowfish die problematischen Zeilen sind, nach der Berechnung in Zeile 45 - das Ergebnis wird zu 0. Linie 47 wird 2 + 0 = 2 und Linie 49 2 nicht weniger als 2 ist, so gibt es keine Schleife

.

Es gibt einige padding in C ++ blowfish, aber ich verloren gehen, wenn ich versuche, es zu verstehen.

Mein Problem ist, dass in C #, muss die Polsterung genau die gleichen wie in C ++, so dass ich eine gültige answer.I nicht zufälliges Auffüllen verwenden kann, und entfernen Sie dann den nutzlosen Bytes nach der Entschlüsselung, , da der Server ich schicke die verschlüsselte Array ist nicht meins.

Könnten Sie mir zeigen zu was Polsterung ist in der C ++ verwendet Blowfish und wie es sollte in C # .NET implementiert werden.

// Hinweis Ich brauche nicht dieses Paket mehrere Male zu senden, nur einmal.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Der Code, den Sie pastebinned (nicht für SO durch die Art und Weise zu empfehlen, da Ihre Paste wird entfernt, wenn niemand ihn eine Zeit lang liest, wodurch diese Frage gebrochen verlassen) sagt in seinem Header Kommentar:

/// Note that the number of bytes must be adjusted to the block size of the algorithm.

(Linien 3 und 4). So scheint es spec zu verhalten, wenn es Ihre untermaßigen Daten ignoriert.

Der C ++ Code Padding mit Null-Bytes zu sein scheint, der Kommentar sagt:

// pad end of data with null bytes to complete encryption

Es wäre hilfreich, die C ++ Funktion GetOutputLength(), um zu sehen, zu sehen, wie es zu kleinen Eingaben behandelt. Ich denke, es rundet nach oben, aber es wäre schön, zu überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top