Генерация случайных байтов для ключа TripleDES C # - PullRequest
8 голосов
/ 18 марта 2011

Мне нужно сгенерировать байтовый массив для шифрования TripleDES.Я не хочу использовать .generateKey(), потому что мне нужно знать байты в ключе, чтобы передать их в другое приложение.

Спасибо за ответы, но я забыл упомянуть одну вещь: байты должны бытьстранное соотношение.В противном случае я не могу сгенерировать ключ TripleDES из них.Я не очень знаком с нечетной четностью, поэтому я должен создать проверку байтов, имеет ли она нечетную четность или нет;тогда, если это действительно помещает это в массив, иначе нет.

Ответы [ 5 ]

4 голосов
/ 18 марта 2011

Если вам нужно обеспечить нечетный паритет, вы должны вычислить его самостоятельноЭто должно сделать:

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;
3 голосов
/ 18 марта 2011

Как насчет:

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

tripleDes.Key = key;

Обратите внимание, что RandomNumberGenerator подходит для криптографии (с точки зрения достаточно надежных, трудно предсказуемых случайных данных), тогда как System.Random - нет.

2 голосов
/ 17 ноября 2011

Но ... в чем проблема только с:

TripleDES provider = TripleDES.Create();

byte[] key = provider.Key;

Там вы получите ваш ключ, используемый эн- и дешифратором, созданным с этим экземпляром.

Обратите внимание, что другие ответыне хватает TripleDES.IsWeakKey.

1 голос
/ 18 марта 2011

Метод GetBytes возвращает криптографически стойкую последовательность значений:

        var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
        byte [] barr = new byte[128];
        rng.GetBytes(barr);
        foreach (var b in barr)
        {
            Console.WriteLine(b);
        }
0 голосов
/ 18 марта 2011

Как насчет Random.NextBytes()

Подробнее здесь .

...