Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#.NET加密don';不能正确解密_C#_.net_Encryption_Cryptography_Tripledes - Fatal编程技术网

C#.NET加密don';不能正确解密

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

我试图用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 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();
}