C# 为三元组密钥C生成随机字节#

C# 为三元组密钥C生成随机字节#,c#,tripledes,C#,Tripledes,我需要为TripleDES加密生成字节数组。我不想使用.generateKey(),因为我需要知道密钥中的字节,才能将它们传递给另一个应用程序 谢谢你的回复,但我忘了提一件事:字节必须是奇数奇偶校验。否则,我无法从它们生成三元组密钥。我不太熟悉奇偶校验,所以我想必须创建一个字节检查,看它是否有奇偶校验;然后,如果它确实将其放入数组中,否则不会。那么Random.NextBytes()呢。 更多信息。关于: RandomNumberGenerator rng = RandomNumberGener

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


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

那么
Random.NextBytes()呢。

更多信息。

关于:

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

tripleDes.Key = key;
请注意,该方法适用于加密工作(就相当安全、难以预测的随机数据而言),而
System.random
则不适用。

该方法返回的值序列具有加密性:

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

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

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;
var rng=new RNGCryptoServiceProvider();
var key=新字节[24];
rng.GetBytes(键);
对于(变量i=0;i>=1)奇偶校验^=b&1;
键[i]=(字节)(键字节|(奇偶校验==0?1:0));
}
返回键;

但是。。。有什么问题吗

TripleDES provider = TripleDES.Create();

byte[] key = provider.Key;
在这里,您可以获得使用此实例创建的en-and-decryptor使用的密钥


请注意,其他答案缺少一个。

Thnx,这很有效,但请看我编辑的问题。我忘了说奇偶校验。
Random
加密使用不安全。RandomNumberGenerator rng=new RandomNumberGenerator.Create();