我有两个字符串如下:
String A = 29CEDC4A435DD625 (key)
String B = 5272B624753D79AF (encodedText)
我尝试通过字符串A解密字符串B以获得结果:8BC141DCC122B74F但是没有成功使用解密函数,如下所示:
public static string Decrypt (string encodedText, string key)
{
TripleDESCryptoServiceProvider desCrytoProvider = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider();
byte[] byteHash;
byte[] byteBuff;
byteHash = hashMD5Provider.ComputeHash(Encoding.UTF8.GetBytes(key));
desCrytoProvider.Key = byteHash;
desCrytoProvider.Mode = CipherMode.ECB;
byteBuff = Convert.FromBase64String(encodedText);
string plaintext = Encoding.UTF8.GetString(desCrytoProvider.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
return plaintext;
}
答案 0 :(得分:0)
我认为从字节数组转换为字符串时遇到麻烦,反之亦然。尝试使用Convert.ToBase64String(...),Convert.FromBase64String(...)。它有效:
static TripleDESCryptoServiceProvider desCrytoProvider = new TripleDESCryptoServiceProvider();
static MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider();
static void Main(string[] args)
{
String key = "29CEDC4A435DD625";//(key)
String encodedText = Encrypt("just4fun", key);
Console.WriteLine(Decrypt(encodedText, key));
}
public static String Encrypt(String text, String key)
{
byte[] byteHash;
byte[] byteBuff;
var bytes = Encoding.UTF8.GetBytes(key);
byteHash = hashMD5Provider.ComputeHash(bytes);
desCrytoProvider.Key = byteHash;
desCrytoProvider.Mode = CipherMode.ECB;
byteBuff = Encoding.UTF8.GetBytes(text);
return Convert.ToBase64String(desCrytoProvider.CreateEncryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
}
public static String Decrypt(String encodedText, String key)
{
byte[] byteHash;
byte[] byteBuff;
var bytes = Encoding.UTF8.GetBytes(key);
byteHash = hashMD5Provider.ComputeHash(bytes);
desCrytoProvider.Key = byteHash;
desCrytoProvider.Mode = CipherMode.ECB;
byteBuff = Convert.FromBase64String(encodedText);
return Encoding.UTF8.GetString(desCrytoProvider.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
}