【发布时间】:2015-04-09 22:18:55
【问题描述】:
我正在尝试加密和解密 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();
}
似乎加密或解密阶段会弄乱文本开头的一些字节(在我运行程序时以不同的方式)有时甚至会改变字节数组的长度。 我能够使用 ECB 密码使其工作,但我的数据有一些静态块,随时都会导致相同的结果。
来自https://msdn.microsoft.com/it-it/library/system.security.cryptography.ciphermode(v=vs.110).aspx关于欧洲央行:
重要提示:不推荐使用此模式,因为它可以打开门 多个安全漏洞。如果要加密的明文包含 大量重复,密文是可行的 一次打破一个街区。也可以使用块分析 来确定加密密钥。此外,活跃的对手可以 在不检测的情况下替换和交换单个块,这 允许将块保存并插入到流中的其他点 不被发现。
这些是 enc 之后的一些结果。和十二月:
��u��T�be encrypted
U����ŋbe encrypted
5�AL\"0be encrypted
等等,谢谢你的建议。
【问题讨论】:
-
那是因为 IV。抱歉,该睡觉了,现在你会找到示例,知道要查找什么了。
标签: c# .net encryption cryptography tripledes