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

8

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

谢谢大家的回复,但是我忘记提到一件事:这些字节必须是奇校验位。否则,我无法从它们生成TripleDES密钥。我对奇校验位不是很熟悉,所以我想必须创建一个字节检查,看它是否具有奇校验位;如果是,则将其放入数组中,否则不放。

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;

3

怎么样:

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

tripleDes.Key = key;

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

随机数生成器 rng = new RandomNumberGenerator.Create(); - theUser

2
但是...仅仅这样有什么问题呢?
TripleDES provider = TripleDES.Create();

byte[] key = provider.Key;

这里获取你使用此实例创建的加密和解密器所使用的密钥。

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


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);
        }

谢谢,那个可以工作了,但请看一下我编辑过的问题。我忘记说了奇校验。 - hs2d

-1

关于 Random.NextBytes() 呢?

更多信息请点击这里


“Random” 不适合用于加密。 - CodesInChaos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接