8

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

感谢您的回复,但我忘了提一件事:字节必须是奇校验。否则我无法从它们生成 TripleDES 密钥。我对奇校验不太熟悉,所以我想必须创建一个字节检查它是否有奇校验;那么如果它确实将它放入数组中,否则不会。

4

5 回答 5

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;
于 2011-03-18T08:36:50.010 回答
3

怎么样:

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

tripleDes.Key = key;

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

于 2011-03-18T07:51:48.997 回答
2

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

TripleDES provider = TripleDES.Create();

byte[] key = provider.Key;

在那里,您可以获得使用此实例创建的加密和解密器使用的密钥。

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

于 2011-11-16T22:58:10.597 回答
1

GetBytes方法返回加密强的值序列:

        var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
        byte [] barr = new byte[128];
        rng.GetBytes(barr);
        foreach (var b in barr)
        {
            Console.WriteLine(b);
        }
于 2011-03-18T07:53:06.577 回答
-1

关于什么 Random.NextBytes()

更多信息在这里

于 2011-03-18T07:51:07.140 回答