为TripleDES密钥生成随机字节C#

时间:2011-03-18 07:48:47

标签: c# tripledes

我需要为TripleDES加密生成字节数组。我不想使用.generateKey()因为我需要知道密钥中的字节以将它们传递给另一个应用程序。

感谢回复,但我忘了提一件事:字节必须是奇数奇偶校验。否则我无法从它们生成TripleDES密钥。我对奇数奇偶校验不是很熟悉,所以我想要创建一个字节检查,如果它有奇数奇偶校验;然后如果它确实把它放在数组中,否则不是。

5 个答案:

答案 0 :(得分:4)

如果您需要确保奇校验,您必须自己计算。这应该做:

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;

答案 1 :(得分:3)

怎么样:

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

tripleDes.Key = key;

请注意RandomNumberGenerator适用于加密工作(就合理安全,难以预测的随机数据而言),而System.Random则不适用。

答案 2 :(得分:2)

但是......只是有什么问题:

TripleDES provider = TripleDES.Create();

byte[] key = provider.Key;

您可以使用此实例创建的en-和decryptor使用您的密钥。

请注意,其他答案缺少TripleDES.IsWeakKey

答案 3 :(得分:1)

GetBytes方法返回crypthographically强大的值序列:

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

答案 4 :(得分:-1)

Random.NextBytes()

怎么样?

更多信息here