我需要为TripleDES加密生成字节数组。我不想使用.generateKey()
,因为我需要知道密钥中的字节以将它们传递给另一个应用程序。为TripleDES密钥生成随机字节C#
感谢您的回复,但我忘了提一件事:字节必须是奇数奇偶校验。否则,我无法从它们生成TripleDES密钥。我对奇数奇偶校验不太熟悉,所以我想必须创建一个字节校验,如果它有奇数奇偶校验;那么如果它确实把它放在数组中,否则不。
我需要为TripleDES加密生成字节数组。我不想使用.generateKey()
,因为我需要知道密钥中的字节以将它们传递给另一个应用程序。为TripleDES密钥生成随机字节C#
感谢您的回复,但我忘了提一件事:字节必须是奇数奇偶校验。否则,我无法从它们生成TripleDES密钥。我对奇数奇偶校验不太熟悉,所以我想必须创建一个字节校验,如果它有奇数奇偶校验;那么如果它确实把它放在数组中,否则不。
如果您需要确保奇校验,你必须自己去计算它。这应该这样做:
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;
如何:
RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] key = new byte[24]; // For a 192-bit key
rng.GetBytes(key);
tripleDes.Key = key;
注意RandomNumberGenerator
适用于加密工作(在合理的安全,难以预知的随机数据方面),而System.Random
不是。
RandomNumberGenerator rng = new RandomNumberGenerator.Create(); – theIrishUser 2013-03-16 13:29:12
但是......什么是只有问题:
TripleDES provider = TripleDES.Create();
byte[] key = provider.Key;
有你习惯用这个实例创建的恩和解密密钥。
请注意,其他答案缺少TripleDES.IsWeakKey
。
这个效果最好 – atconway 2013-07-12 22:07:07
谢谢,这工作。 – hs2d 2011-03-18 08:45:48