我是加密/解密的新手。我正在尝试解密一个加密的输入字符串,并且输出为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;
}
}
答案 0 :(得分:5)
如果您使用IV,则应使用CipherMode.CBC
。欧洲央行不使用任何IV。
此外,您的数据根本没有填充,它只包含32个字节。要测试解密,通常首先尝试不填充。这样,您可以通过查看生成的明文来确定使用哪个填充。
普通数据过于陈旧,无法在此打印,所以我不会。
答案 1 :(得分:3)
我有一个非常类似的问题,我通过将 PaddingMode 更改为无
来修复它我的 CipherMode 是 ECB (电子密码本)。