'Bad Data'使用DES3解密消息时

ant*_*009 0 c# encryption

C#2008

我使用以下代码来加密和加密邮件.但是,当我尝试解密时,我收到"错误数据"错误.

我的代码下面有什么问题吗?

非常感谢,

public string encryptText(string text)
    {
        try
        {
            TripleDESCryptoServiceProvider encrypt = new TripleDESCryptoServiceProvider();

            encrypt.Key = new byte[] { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 144, 89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0 };
            encrypt.IV = new byte[] { 1, 2, 3, 5, 8, 13, 21, 34 };
            byte[] byteText = Encoding.Unicode.GetBytes(text);

            ICryptoTransform encryptor = encrypt.CreateEncryptor();

            byte[] encryptedText = encryptor.TransformFinalBlock(byteText, 0, byteText.Length);

            return Encoding.Unicode.GetString(encryptedText);
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);

            return ex.Message;
        }

    }

    /// Decrypt the text
    public string decryptText(string encryptedText)
    {
        try
        {
            byte[] bytesText = Encoding.Unicode.GetBytes(encryptedText);

            TripleDESCryptoServiceProvider decrypt = new TripleDESCryptoServiceProvider();

            decrypt.Key = new byte[] { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 144, 89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0 };
            decrypt.IV = new byte[] { 1, 2, 3, 5, 8, 13, 21, 34 };

            ICryptoTransform decryptor = decrypt.CreateDecryptor();

            byte[] originalText = decryptor.TransformFinalBlock(bytesText, 0, encryptedText.Length);

            return Encoding.Unicode.GetString(originalText);
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);

            return ex.Message;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

您正在使用加密的字节并使用它们将它们转换为字符串Encoding.Unicode,但随后您将使用字符串并将其转换回字节Encoding.Default.这几乎可以保证不起作用(除非默认值是UTF-16).

但是,您应该使用其中任何一种 - 使用编码将任意二进制数据转换为文本是一个坏主意.使用Convert.ToBase64String(在加密器中)和Convert.FromBase64String(在解密器中)代替.

(我也非常想知道返回异常消息的智慧,好像它是加密/解密的成功结果,但希望你只是为了示例代码而这样做.)