解密TripleDES"坏数据"

c.d*_*lap 3 c# encryption encoding cryptography

我是加密/解密的新手.我正在尝试解密一个加密的输入字符串,并输出44个字符.

这是我到目前为止,但在尝试执行"TransformFinalBlock"函数时,我一直收到"错误的数据".

public static String Decrypt(String input)
    {
        try{
            byte[] inputArray = Convert.FromBase64String(input);
            TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
            tripleDES.KeySize = 128;
            tripleDES.Key = UTF8Encoding.UTF8.GetBytes("0123456789ABCDEF");
            tripleDES.IV = UTF8Encoding.UTF8.GetBytes("ABCDEFGH");
            tripleDES.Mode = CipherMode.ECB;
            tripleDES.Padding = PaddingMode.PKCS7;
            ICryptoTransform transform = tripleDES.CreateDecryptor();
            byte[] resultArray = transform.TransformFinalBlock(inputArray, 0, inputArray.Length);
            tripleDES.Clear();

            return UTF8Encoding.UTF8.GetString(resultArray);
        }
        catch(Exception except){
            Debug.WriteLine(except + "\n\n" + except.StackTrace);
            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Maa*_*wes 5

如果您使用IV,那么您应该使用CipherMode.CBC.欧洲央行不使用任何IV.

此外,您的数据根本没有填充,它只包含32个字节.要测试解密,通常首先尝试不填充.这样,您可以通过查看生成的明文来确定使用哪个填充.

普通的数据太可靠了,不能在这里打印,所以我不会.