3DES 加密问题 - 每次都有不同的密文
本文关键字:密文 加密 问题 3DES | 更新日期: 2023-09-27 18:35:29
我尝试在 c# 的 ECB 模式下实现 3DES。
问题是下面的代码每次运行它时都会给我不同的密文,即使我传递的参数与您看到的相同 - 并且我使用 ECB 模式。
有人可以帮助出了什么问题吗?每次运行下面的程序时,输出必须相同,不是吗?
public static byte[] SingleBlock3DES_ECB_Encrypt(byte [] plain, byte [] key)
{
if(plain.Length != 8)
throw new Exception("Plain text length for single block should be 8 bytes");
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
// set the secret key for the tripleDES algorithm
tdes.Key = key;
// mode of operation. there are other 4 modes.
// We choose ECB(Electronic code Book)
tdes.Mode = CipherMode.ECB;
// padding mode(if any extra byte added)
tdes.Padding = PaddingMode.None;
// Set key size
tdes.KeySize = 192;
ICryptoTransform cTransform = tdes.CreateEncryptor();
// transform the specified region of bytes array to resultArray
byte[] resultArray = cTransform.TransformFinalBlock(plain, 0, plain.Length);
// Release resources held by TripleDes Encryptor
tdes.Clear();
return resultArray;
}
static void Main(string[] args)
{
byte[] plain = new byte[8];
byte[] key = new byte[24];
for (int i = 0; i < 8; i++)
plain[i] = 1;
for (int i = 0; i < 24; i++)
key[i] = (byte) i;
byte[] res = SingleBlock3DES_ECB_Encrypt(plain, key);
string hex = BitConverter.ToString(res);
Console.WriteLine(hex);
}
所以简单来说,如果我多次运行这个程序,每次都会得到不同的输出。显然,某处一定有什么问题?
正如您所写,如果您删除tdes.KeySize = 192
代码就可以了。但事实上发生的事情是,当你
tdes.KeySize = 192;
key
重置为随机值。
所以你可以移动
tdes.KeySize = 192;
在
tdes.Key = key;
或者干脆删除它,因为对于 3DES,KeySize
固定为 192。
我解决了这个问题。奇迹般地,当我删除它时
tdes.KeySize = 192;
从代码来看,它有效。