私のアプリケーションで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());
}
}
}
}
と呼ばれるクラスのコードですが、私は、文字列を暗号化する際に、再びそれを解読し、1より多くの時間を暗号化し、暗号化された文字列となった暗号化された前回と同じではありません。だから、最初に暗号化された文字列です:
:
kEN0HUp/dqz8kXA7nYivJG6Jl3haLJjhBq1UfEtQTwaPwizW // 03M0UxF8dBuYZo2BoZ5vsVcXRJF1LpFZLWxDsdeKAC43L2K2OoYRxTn/dA6KmM13YS9xOezGiROQfVj5qrkdokJRCvj0gYfFoH2oeDGyN + EAw5Dgzsp697kj4 =
、ここでは、第二の暗号化された文字列が来ますkEN0HUp/dqz8kXA7nYivJG6Jl3haL JjhBq1UfEtQTwaPwizW // 03M0UxF8dBuYZo2BoZ5vsVcXRJF1LpFZLWxDsdeKAC43L2K2OoYRxTn/dA6KmM13YS9xOezGiROQfVj5qrkdokJRCvj0gYfFoH2oeDGyN + EAw5
彼らはこの "Dgzsp697kj4 =" の最初の文字列を除いて、ほぼ同じです。
どういうところが間違っていますか?
ありがとうございます。
DESおよびECBの両方が安全ではありません。あなたはAESとCBCを使うべきです。 – SLaks
ECBは本質的に安全ではありません。適切なアプリケーションに最適です。鍵は正しい問題でそれを使うことです。 – erickson
平易なDES *が問題ですが。 – erickson