gpt4 book ai didi

c# - 如何在 OFB 模式下使用 C# 中的 3DES 解密?

转载 作者:行者123 更新时间:2023-11-30 16:31:30 27 4
gpt4 key购买 nike

我需要解密在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com