c# - 三重 DES C# 错误:指定的初始化向量 (IV) 与此算法的块大小不匹配
问题描述
I am running the following code in C# to decrypt a ciphertext (A19E14B80C19B70925A93DBC9250EB2EC1B6365DCDE42B9F1E44CD4D9AA246BA) that was generated with a Triple-DES-CBC with PKCS5Padding under IV (D160A98F71D5251A) with a given Triple DES key (43451943D61940EE3DF251C34B649EAB602DF3BAE61). 所有这些都是十六进制格式。但是,当我运行代码时,我不断收到错误消息:指定的初始化向量(IV)与此算法的块大小不匹配。谁能帮我弄清楚为什么我的代码不起作用?
using System;
using System.Security.Cryptography;
using System.Text;
public class MyClass
{
public static void RunDecrypt()
{
string result = TripleDesDecrypt("A19E14B80C19B70925A93DBC9250EB2EC1B6365DCDE42B9F1E44CD4D9AA246BA");
WL(result);
// PAUSE
RL();
}
static string TripleDesDecrypt(string Data)
{
byte[] key = Encoding.UTF8.GetBytes("43451943D61940EE3DF251C34B649EAB602DF3BAE61");
byte[] iv = Encoding.UTF8.GetBytes("D160A98F71D5251A");
byte[] data = StringToByteArray(Data);
byte[] enc = new byte[0];
TripleDES tdes = TripleDES.Create();
tdes.IV = iv;
tdes.Key = key;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.Zeros;
ICryptoTransform ict = tdes.CreateDecryptor();
enc = ict.TransformFinalBlock(data, 0, data.Length);
return Encoding.UTF8.GetString(enc);
}
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
#region Helper methods
public static void Main()
{
try
{
RunDecrypt();
}
catch (Exception e)
{
string error = string.Format("---\nThe following error occurred while executing the snippet:\n{0}\n---", e.ToString());
Console.WriteLine(error);
}
finally
{
Console.Write("Press any key to continue...");
Console.ReadKey();
}
}
private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
#endregion
}
解决方案
推荐阅读
- python - 如何确认 pip install 正在安装到正确的 python 版本?
- facebook - Facebook 应用程序 URL 中的“ref=br_rs”是什么意思?
- python - 如何在必须根据决策替换元素的列表中处理重复项?
- python - 如何保存临时图像,然后用opencv显示它
- html - 我使用 DIV 制作表格,当表格行太多时,我需要通过 TBody div 滚动
- java - 如何让我的 Java 类中的方法返回 findViewById?
- python - 为什么 findAll 不从网页返回预期的 div 数?
- ubuntu - 为什么优雅地关闭 emacs 守护进程很重要?
- swift - 如果我创建一个 UILabel 作为我的 LoadView() 的一部分,与创建一个文件私有 uilabel 有什么区别?
- html - 如何从浏览器手机打开微信并打开其中的链接