我在我的應用程序中使用DES-ECB + base64加密。這就是類的代碼,我所謂的「加密」DES-ECB加密和解密
public class Crypto
{
public static string Decrypt(string encryptedString)
{
DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
desProvider.Mode = CipherMode.ECB;
desProvider.Padding = PaddingMode.PKCS7;
desProvider.Key = Encoding.ASCII.GetBytes("e5d66cf8");
using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(encryptedString)))
{
using (CryptoStream cs = new CryptoStream(stream, desProvider.CreateDecryptor(), CryptoStreamMode.Read))
{
using (StreamReader sr = new StreamReader(cs, Encoding.ASCII))
{
return sr.ReadToEnd();
}
}
}
}
public static string Encrypt(string decryptedString)
{
DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
desProvider.Mode = CipherMode.ECB;
desProvider.Padding = PaddingMode.PKCS7;
desProvider.Key = Encoding.ASCII.GetBytes("e5d66cf8");
using (MemoryStream stream = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(stream, desProvider.CreateEncryptor(), CryptoStreamMode.Write))
{
byte[] data = Encoding.Default.GetBytes(decryptedString);
cs.Write(data, 0, data.Length);
return Convert.ToBase64String(stream.ToArray());
}
}
}
}
但是當我加密的字符串,然後再對其進行解密和加密一次,加密字符串是不一樣的原先的加密了。所以這是第一個加密的字符串:
kEN0HUp/dqz8kXA7nYivJG6Jl3haLJjhBq1UfEtQTwaPwizW // 03M0UxF8dBuYZo2BoZ5vsVcXRJF1LpFZLWxDsdeKAC43L2K2OoYRxTn/dA6KmM13YS9xOezGiROQfVj5qrkdokJRCvj0gYfFoH2oeDGyN + EAw5Dgzsp697kj4 =
和來這裏的第二加密的字符串:
kEN0HUp/dqz8kXA7nYivJG6Jl3haL JjhBq1UfEtQTwaPwizW // 03M0UxF8dBuYZo2BoZ5vsVcXRJF1LpFZLWxDsdeKAC43L2K2OoYRxTn/dA6KmM13YS9xOezGiROQfVj5qrkdokJRCvj0gYfFoH2oeDGyN + EAw5
它們幾乎相同,只是這個 「Dgzsp697kj4 =」 中的第一個字符串。
有什麼問題?
在此先感謝。
兩個DES和歐洲央行是不安全的。你應該使用AES和CBC。 – SLaks
歐洲央行並非天生不安全。它對於正確的應用程序來說是一個很好的選擇。關鍵是在正確的問題上使用它。 – erickson
Plain DES *雖然是個問題。 – erickson