C# DES-ECB加密和解密
我在应用程序中使用DES-ECB+base64加密。这是我称之为“加密”的类的代码 但当我加密一个字符串,然后再次解密并再次加密时,加密的字符串与之前加密的字符串不同。这是第一个加密字符串: kEN0HUp/DQZ8KXA7NYIVJG6JL3HALJHBQ1FETTWAPWIZW//03M0UXF8DBUYZO5VSVCXRJF1LPFZLWXDEKAC43L2K2OYRXTN/DA6KMM13YS9XOEZIROQFJ5QRKDOKJRCVJ0GYFFOO2EDGYN+EAw5Dgzsp697kj4= 下面是第二个加密字符串: kEN0HUp/DQZ8KXA7NYIVJG6JL3HALJHBQ1FETQTWAPWIZW//03M0UXF8DBUYZO5VSVCXRJF1LPFZLWXDEKAC43L2K2OYRXTN/DA6KMM13YS9XOEZIROQFJ5QRKDOKJRCVJ0GYFFOYN+EAw5 除了第一个字符串中的“Dgzsp697kj4=”之外,它们几乎相同。C# DES-ECB加密和解密,c#,encryption,base64,des,C#,Encryption,Base64,Des,我在应用程序中使用DES-ECB+base64加密。这是我称之为“加密”的类的代码 但当我加密一个字符串,然后再次解密并再次加密时,加密的字符串与之前加密的字符串不同。这是第一个加密字符串: kEN0HUp/DQZ8KXA7NYIVJG6JL3HALJHBQ1FETTWAPWIZW//03M0UXF8DBUYZO5VSVCXRJF1LPFZLWXDEKAC43L2K2OYRXTN/DA6KMM13YS9XOEZIROQFJ5QRKDOKJRCVJ0GYFFOO2EDGYN+EAw5Dgzsp69
怎么了?
提前谢谢。我也有类似的问题。您应该检查已解密字符串的末尾是否没有追加空格。您可能需要删除空白。您正在丢失数据。在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());
}