- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要解密在 OFB 模式下使用 3DES 加密的消息。
我有一条加密信息。我有一把 key 。我有静脉注入(inject)器。
我在 .Net 平台上
加密后的消息在 base64 中长度为 24 个字符。 key 在 base64 中长度为 24 个字符。IV为64位二进制数。
由于缺少例子我尝试使用一个ECB模式的例子,如下:
public static string DecryptTextFromMemory(byte[] Data, byte[] Key, byte[] IV)
{
try
{
// Create a new MemoryStream using the passed
// array of encrypted data.
MemoryStream msDecrypt = new MemoryStream(Data);
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV),
CryptoStreamMode.Read);
// Create buffer to hold the decrypted data.
byte[] fromEncrypt = new byte[Data.Length];
// Read the decrypted data out of the crypto stream
// and place it into the temporary buffer.
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
//Convert the buffer into a string and return it.
return new ASCIIEncoding().GetString(fromEncrypt);
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
}
这是我得到的错误:
发生密码错误:指定的 key 不是该算法的有效大小。
我尝试了其他代码示例,其中我已将算法更改为 OFB,但它说它不受支持。
谁能帮帮我?我显然无法理解这些东西,所以如果我搞砸了一些显而易见的事情,请耐心等待。
在 ECB 模式下有很多 3DES 解密的例子,但我找不到关于 OFB 模式的例子。
最佳答案
第三方 CryptoSys API 表示它特别支持 OFB 模式下的 Triple-DES。不知道为什么 .NET 实现不会,尽管一个很好的理由可能是阻止它在新开发中的使用,以支持更快的 Rijndael 和 AES 密码。
编辑:只是为了解释一下,算法的“模式”是一种定义的方式,利用基本的 Triple-DES 加密算法来生成加密文本。这些已成为大多数对称 key 算法的标准化。 OFB 模式是两种标准“流密码”模式之一,它使用基本算法基于已加密的文本创建“移位寄存器”,允许第一个“ block ”之后的文本一次加密一个字节更大的“ block ”。
无论如何,“ key 大小”错误指向特定类型的问题。 Triple-DES 算法(所有这些算法;这不是特定于实现的)需要一个正好是 128 位或 192 位长的 key 。您将 key 作为字节数组获取,因此您需要一个正好有 16 或 24 个元素长的数组。这应该是您的第一批检查之一;如果键的大小不正确,则抛出 ArgumentException。沿着调用堆栈跟踪问题,直到找到生成 key 的位置并从源头解决问题。
接下来,如果您将 TripleDesCryptoServiceProvider
的 Mode 属性设置为 OFB,它会立即或在您开始解密时给您一个 CryptoException
,表明模式不是不支持,那就是 .NET 的限制; .NET 开发团队懒得在提供程序中实现该算法的那种模式。尝试自己动手会麻烦多于它的值(value);您必须寻找可由 .NET 代码使用的第三方实现。几乎任何为 COM 互操作注册的库都可以解决问题,不必用 .NET 语言编写。有几十个;我会搜索 CryptoSys,正如我所说,文档说它按名称支持 TripleDES OFB。
关于c# - 如何在 OFB 模式下使用 C# 中的 3DES 解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4880392/
我是一名优秀的程序员,十分优秀!