C#.NET加密don';不能正确解密
我试图用C#(.NET 3.5)对文本进行加密和解密,发现这个简单的代码不起作用:C#.NET加密don';不能正确解密,c#,.net,encryption,cryptography,tripledes,C#,.net,Encryption,Cryptography,Tripledes,我试图用C#(.NET 3.5)对文本进行加密和解密,发现这个简单的代码不起作用: private const string KEY = "Chiave"; static void Main(string[] args) { string plainText = "Data to be encrypted"; byte[] keyArray; MD5CryptoServiceProvider hashmd5 = new
private const string KEY = "Chiave";
static void Main(string[] args)
{
string plainText = "Data to be encrypted";
byte[] keyArray;
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(KEY));
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(plainText);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] encArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.PKCS7;
cTransform = tdes.CreateDecryptor();
byte[] decArray = cTransform.TransformFinalBlock(encArray, 0, encArray.Length);
if (encArray.Length == decArray.Length)
{
for (int i = 0; i < encArray.Length; ++i)
Console.Out.Write("{0,3}|{1,3}", encArray[i], decArray[i]);
} else
Console.Out.Write("Length error!");
Console.In.Read();
}
诸如此类,谢谢您的建议。您已经创建了一个新的
TripleDescriptionServiceProvider实例,但是这个新实例的IV值与第一个实例的IV值不同
此外,将加密数组的长度与解密数组的长度进行比较是不正确的。您应该尝试返回原始字符串,并检查两者是否相等
private const string KEY = "Chiave";
static void Main(string[] args)
{
string plainText = "Data to be encrypted";
byte[] keyArray;
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(KEY));
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(plainText);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] encArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
// REMOVE THESE LINES
// tdes = new TripleDESCryptoServiceProvider();
// tdes.Key = keyArray;
// tdes.Mode = CipherMode.CBC;
// tdes.Padding = PaddingMode.PKCS7;
cTransform = tdes.CreateDecryptor();
byte[] decArray = cTransform.TransformFinalBlock(encArray, 0, encArray.Length);
// if (encArray.Length == decArray.Length)
// {
// for (int i = 0; i < encArray.Length; ++i)
// Console.Out.Write("{0,3}|{1,3}", encArray[i], decArray[i]);
//} else
// Console.Out.Write("Length error!");
string result = UTF8Encoding.UTF8.GetString(decArray);
Console.WriteLine(result);
Console.In.Read();
}
private const string KEY=“Chiave”;
静态void Main(字符串[]参数)
{
string plainText=“要加密的数据”;
字节[]键数组;
MD5CryptoServiceProvider hashmd5=新的MD5CryptoServiceProvider();
keyArray=hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(KEY));
byte[]toEncryptArray=UTF8Encoding.UTF8.GetBytes(纯文本);
TripleDESCryptoServiceProvider tdes=新的TripleDESCryptoServiceProvider();
密钥=密钥数组;
tdes.Mode=CipherMode.CBC;
tdes.Padding=PaddingMode.PKCS7;
ICryptoTransform cTransform=tdes.CreateEncryptor();
字节[]encArray=cTransform.TransformFinalBlock(toEncryptArray,0,toEncryptArray.Length);
//拆下这些线
//tdes=新的TripleDescriptionServiceProvider();
//密钥=密钥数组;
//tdes.Mode=CipherMode.CBC;
//tdes.Padding=PaddingMode.PKCS7;
cTransform=tdes.CreateDecryptor();
字节[]decArray=cTransform.TransformFinalBlock(encArray,0,encArray.Length);
//if(encArray.Length==decArray.Length)
// {
//对于(int i=0;i
那是因为IV。对不起,我得睡觉了,你现在可以找到例子了,你知道该找什么了。谢谢它是IV(我省略了结果字符串的计算,作为加密文本的base64编码,以确保它不是编码问题)
private const string KEY = "Chiave";
static void Main(string[] args)
{
string plainText = "Data to be encrypted";
byte[] keyArray;
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(KEY));
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(plainText);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] encArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
// REMOVE THESE LINES
// tdes = new TripleDESCryptoServiceProvider();
// tdes.Key = keyArray;
// tdes.Mode = CipherMode.CBC;
// tdes.Padding = PaddingMode.PKCS7;
cTransform = tdes.CreateDecryptor();
byte[] decArray = cTransform.TransformFinalBlock(encArray, 0, encArray.Length);
// if (encArray.Length == decArray.Length)
// {
// for (int i = 0; i < encArray.Length; ++i)
// Console.Out.Write("{0,3}|{1,3}", encArray[i], decArray[i]);
//} else
// Console.Out.Write("Length error!");
string result = UTF8Encoding.UTF8.GetString(decArray);
Console.WriteLine(result);
Console.In.Read();
}