Generate random bytes for TripleDES key C#

hs2d picture hs2d · Mar 18, 2011 · Viewed 9.5k times · Source

I need to generate byte array for TripleDES encryption. I don't want to use .generateKey() because I need to know the bytes in the key to pass them to another application.

Thanks for the replies but I forgot to mention one thing: the bytes have to be odd parity. Otherwise I can't generate a TripleDES key from them. I'm not so familiar with the odd parity, so I guess have to create a byte check if it has odd parity or not; then if it does put it in the array, otherwise not.

Answer

Mormegil picture Mormegil · Mar 18, 2011

If you need to ensure the odd parity, you have to compute it yourself. This should do:

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;