Frage

Ich muss ein Byte-Array für die TripleDES-Verschlüsselung generieren.Ich möchte keinen .generateKey() verwenden, da ich die Bytes im Schlüssel kennen muss, um sie an eine andere Anwendung zu übergeben.

Danke für die Antworten, aber ich habe vergessen, eines zu erwähnen: Die Bytes müssen eine ungerade Parität sein.Andernfalls kann ich keinen TripleDES-Schlüssel daraus generieren.Ich bin mit der ungeraden Parität nicht so vertraut, daher muss ich wohl eine Byteprüfung erstellen, ob sie eine ungerade Parität hat oder nicht.dann, wenn es es in das Array setzt, sonst nicht.

War es hilfreich?

Lösung

Wenn Sie die ungerade Parität sicherstellen müssen, müssen Sie sie selbst berechnen.Dies sollte Folgendes tun:

var rng = new RNGCryptoServiceProvider();
var key = new byte[24];
rng.GetBytes(key);

for(var i = 0; i < key.Length; ++i)
{
    int keyByte = key[i] & 0xFE;
    var parity = 0;
    for (var b = keyByte; b != 0; b >>= 1) parity ^= b & 1;
    key[i] = (byte)(keyByte | (parity == 0 ? 1 : 0));
}

return key;

Andere Tipps

Wie wäre es mit:

RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] key = new byte[24]; // For a 192-bit key
rng.GetBytes(key);

tripleDes.Key = key;

Beachten Sie, dass RandomNumberGenerator für geeignet istKrypto-Arbeit (in Bezug auf einigermaßen sichere, schwer vorhersehbare Zufallsdaten), System.Random hingegen nicht.

Aber ... was ist das Problem mit nur:

TripleDES provider = TripleDES.Create();

byte[] key = provider.Key;

Dort wird Ihr Schlüssel von dem mit dieser Instanz erstellten En- und Entschlüsseler verwendet.

Beachten Sie, dass den anderen Antworten ein TripleDES.IsWeakKey fehlt.

Die GetBytes -Methode wird zurückgegebenkrypthographisch starke Folge von Werten:

        var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
        byte [] barr = new byte[128];
        rng.GetBytes(barr);
        foreach (var b in barr)
        {
            Console.WriteLine(b);
        }

Was ist mit Random.NextBytes() ?

Weitere Informationen hier .

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