【问题标题】:256 Bit Encryption in .NET Core 5.NET Core 5 中的 256 位加密
【发布时间】:2021-01-22 19:19:38
【问题描述】:

多年来,我一直在 .NET 框架中使用 AES 进行 256 位加密。我最近在 .NET Core 5 中启动了一个新项目,并不断收到错误消息,指出此安装仅支持 128 位密钥。经过一番研究,.NET Core 现在似乎只支持 128 位密钥。

我的问题是我已经有大量使用 256 位的 AES 加密的数据。我可以使用 .NET Core 中的替代方案吗?不同的图书馆?一个不同的包,这样我就不必解密和重新加密我所有的现有数据?

//--------------------------------------------------------------------------
//Perform the encryption
//--------------------------------------------------------------------------
try
{
    //Initialize the RijndaelManaged object
    rmAES = new RijndaelManaged { BlockSize = 256, Key = key, IV = iv, Padding = PaddingMode.PKCS7 };

    //Encrypt the data to the memory stream using the CryptoStream snd StreamWriter
    ICryptoTransform rmEncryptor = rmAES.CreateEncryptor(key, iv);
    rmMS = new MemoryStream();

    using CryptoStream rmCStream = new CryptoStream(rmMS, rmEncryptor, CryptoStreamMode.Write);
    using StreamWriter rmSWriter = new StreamWriter(rmCStream);
    rmSWriter.Write(sourceString);
    rmSWriter.Close();
}
catch (Exception ex)
{
    throw new Exception(ex);
}

【问题讨论】:

    标签: encryption .net-core aes rijndael rijndaelmanaged


    【解决方案1】:

    您的问题不是密钥长度,而是块大小。两件事是不同的。 .NET 5 应该支持具有 128 位“正确”块大小的 AES-256。 Rijnadael 的主要区别在于它支持不同的块大小(128、192 和 256 位)。来自wiki about AESAES 是 Rijndael 块密码的子集...(省略)...Rijndael 是具有不同密钥和块大小的密码系列。 对于 AES,NIST 选择了 Rijndael 系列的三个成员,每个成员的块大小为 128 位,但具有三种不同的密钥长度:128、192 和 256 位。

    关于您的问题,您可以从参考源的 github 中删除 RijndaelManaged 类...RijndaelRijndaelManagedRijndaelManagedTransform 应该是您需要的三个主要类。可能您将不得不“借用”其他一些实用方法。他们are all under the MIT license,所以这里没有问题。

    至少,是我会做的。

    【讨论】:

    • 所以我可以将块大小更改为 128,但是当我尝试使用 256 位密钥和 IV 时,我收到以下错误。 “指定的初始化向量 (IV) 与此算法的块大小不匹配。”
    • @Anzel IV 大小与块大小相同。简单来说,对于许多“模式”的加密,每个块的加密都“依赖于”前一个块。 IV 是“块 0”(或“块 -1”,考虑到通常在 C# 中你从 0 开始计数)。而且您不能将 256 位块与 128 位块“混合”。它们以不同的方式加密/解密。因此,如果您必须与使用 256 位块的遗留代码交互,则必须使用 256 位块。
    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2021-09-18
    • 1970-01-01
    • 2014-03-20
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多