Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DES-ECB加密和解密_C#_Encryption_Base64_Des - Fatal编程技术网

C# DES-ECB加密和解密

C# DES-ECB加密和解密,c#,encryption,base64,des,C#,Encryption,Base64,Des,我在应用程序中使用DES-ECB+base64加密。这是我称之为“加密”的类的代码 但当我加密一个字符串,然后再次解密并再次加密时,加密的字符串与之前加密的字符串不同。这是第一个加密字符串: kEN0HUp/DQZ8KXA7NYIVJG6JL3HALJHBQ1FETTWAPWIZW//03M0UXF8DBUYZO5VSVCXRJF1LPFZLWXDEKAC43L2K2OYRXTN/DA6KMM13YS9XOEZIROQFJ5QRKDOKJRCVJ0GYFFOO2EDGYN+EAw5Dgzsp69

我在应用程序中使用DES-ECB+base64加密。这是我称之为“加密”的类的代码

但当我加密一个字符串,然后再次解密并再次加密时,加密的字符串与之前加密的字符串不同。这是第一个加密字符串:

kEN0HUp/DQZ8KXA7NYIVJG6JL3HALJHBQ1FETTWAPWIZW//03M0UXF8DBUYZO5VSVCXRJF1LPFZLWXDEKAC43L2K2OYRXTN/DA6KMM13YS9XOEZIROQFJ5QRKDOKJRCVJ0GYFFOO2EDGYN+EAw5Dgzsp697kj4=

下面是第二个加密字符串:

kEN0HUp/DQZ8KXA7NYIVJG6JL3HALJHBQ1FETQTWAPWIZW//03M0UXF8DBUYZO5VSVCXRJF1LPFZLWXDEKAC43L2K2OYRXTN/DA6KMM13YS9XOEZIROQFJ5QRKDOKJRCVJ0GYFFOYN+EAw5

除了第一个字符串中的“Dgzsp697kj4=”之外,它们几乎相同。
怎么了?

提前谢谢。

我也有类似的问题。您应该检查已解密字符串的末尾是否没有追加空格。您可能需要删除空白。

您正在丢失数据。在Encrypt()方法中,需要调用EncryptFinalBlock()让填充算法知道您已经完成了,以便它可以添加填充:

using (CryptoStream cs = new CryptoStream(stream, desProvider.CreateEncryptor(), CryptoStreamMode.Write))
{
  byte[] data = Encoding.Default.GetBytes(decryptedString);
  cs.Write(data, 0, data.Length);
  cs.FlushFinalBlock(); // <-- Add this
  return Convert.ToBase64String(stream.ToArray());
}
使用(CryptoStream cs=new CryptoStream(stream,DeProvider.CreateEncryptor(),CryptoStreamMode.Write))
{
byte[]data=Encoding.Default.GetBytes(decryptedString);
cs.Write(数据,0,数据长度);

cs.FlushFinalBlock();//DES和ECB都是不安全的。您应该使用AES和CBC。ECB并不是天生不安全的。对于正确的应用程序来说,它可能是一个很好的选择。关键是要在正确的问题上使用它。虽然纯DES是一个问题。谢谢您的建议,但我必须使用DES-ECB。我认为加密方法存在问题。
using (CryptoStream cs = new CryptoStream(stream, desProvider.CreateEncryptor(), CryptoStreamMode.Write))
{
  byte[] data = Encoding.Default.GetBytes(decryptedString);
  cs.Write(data, 0, data.Length);
  cs.FlushFinalBlock(); // <-- Add this
  return Convert.ToBase64String(stream.ToArray());
}