C# C语言中的DES加密#

C# C语言中的DES加密#,c#,encryption,C#,Encryption,以下面的代码为例: DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; ICryptoTransform encryptor = des.CreateEncryptor(); // encrypt byte[] x = UTF8Encoding.UTF8.GetBytes("thi

以下面的代码为例:

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
ICryptoTransform encryptor = des.CreateEncryptor();
// encrypt
byte[] x = UTF8Encoding.UTF8.GetBytes("thisIsATEST");
byte[] enc = encryptor.TransformFinalBlock(x, 0, x.Length);
string savedValue = Convert.ToBase64String(enc);



DESCryptoServiceProvider des1 = new DESCryptoServiceProvider();
des1.Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
ICryptoTransform decryptor = des1.CreateDecryptor();
byte[] y = Convert.FromBase64String(savedValue);
// decrypt
byte[] originalAgain = decryptor.TransformFinalBlock(y, 0, y.Length);
System.Text.ASCIIEncoding e = new System.Text.ASCIIEncoding();
string str = e.GetString(originalAgain);
现在,如果des1.CreateDecryptor(),这对解密不起作用更改为des.CreateDecryptor()它工作正常,我不确定为什么使用完全相同的键


它没有抛出异常,只是没有正确转换字符串。

除非您使用类似ECB模式的方式,否则解密程序需要加密程序使用的初始化向量。

这是因为您没有设置初始化向量(IV)DESCryptoServiceProvider将自动为您生成一个实例,因为您有两个不同的实例,它们将是不同的