Domanda

Devo generare un array di byte per la crittografia TripleDES.Non voglio usare .generateKey() perché ho bisogno di conoscere i byte nella chiave per passarli a un'altra applicazione.

Grazie per le risposte ma ho dimenticato di menzionare una cosa: i byte devono essere a parità dispari.Altrimenti non posso generare una chiave TripleDES da loro.Non ho molta familiarità con la parità dispari, quindi immagino di dover creare un controllo dei byte se ha parità dispari o meno;quindi se lo mette nell'array, altrimenti no.

È stato utile?

Soluzione

Se è necessario garantire la parità dispari, è necessario calcolarla da soli.Questo dovrebbe fare:

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;

Altri suggerimenti

Che ne dici di:

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

tripleDes.Key = key;

Tieni presente che RandomNumberGenerator è adatto percrypto funziona (in termini di dati casuali ragionevolmente sicuri e difficili da prevedere), mentre System.Random non lo è.

Ma ... qual è il problema con solo:

TripleDES provider = TripleDES.Create();

byte[] key = provider.Key;

Là ottieni la tua chiave usata dall'en e dal decryptor creato con questa istanza.

Tieni presente che le altre risposte non hanno un TripleDES.IsWeakKey .

Il metodo GetBytes restituiscesequenza di valori crittograficamente forte:

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

Che dire di Random.NextBytes()

Ulteriori informazioni qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top