gpt4 book ai didi

c# - 如何将 Rijndael 加密与 .Net Core 类库一起使用? (不是 .Net 框架)

转载 作者:可可西里 更新时间:2023-11-01 07:53:43 25 4
gpt4 key购买 nike

我们如何在 .Net Core 类库中使用 Rijndael 加密? (不是 .Net Framework 类库)我们需要创建一个共享的 .Net Core 库以用于多个项目,并且需要实现在项目中使用相同的 Rijndael 加密的加密和解密方法。

我们目前正在使用:

  • VS 企业 2015
  • c#
  • .Net核心类库
  • .NETStandard,Version=v1.6 引用

似乎 .Net Core 1.0 版本中缺少 Rijndael 和 AES 的实现……它似乎只包含基类。我们如何将 Rijndael 或 AES 加密的 .Net Core 实现添加为对新 .Net Core 类库项目的引用?

下面是适用于 .Net Framework 4.5.2 的 Encrypt 方法:

public static string Encrypt(string valueToEncrypt, string symmetricKey, string initializationVector)
{
string returnValue = valueToEncrypt;

var aes = new System.Security.Cryptography.RijndaelManaged();
try
{
aes.Key = ASCIIEncoding.ASCII.GetBytes(symmetricKey);
aes.IV = ASCIIEncoding.ASCII.GetBytes(initializationVector);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.ISO10126;

var desEncrypter = aes.CreateEncryptor();
var buffer = ASCIIEncoding.ASCII.GetBytes(valueToEncrypt);

returnValue = Convert.ToBase64String(desEncrypter.TransformFinalBlock(buffer, 0, buffer.Length));
}
catch (Exception)
{
returnValue = string.Empty;
}

return returnValue;
}

最佳答案

Rijndael 和 AES 之间的区别(在 .NET 中)是 Rijndael 允许更改 block 大小,但 AES 不允许。由于 RijndaelManaged 的​​默认 block 大小与 AES block 大小(128 位/16 字节)相同,实际上您使用的是 AES。

无需按名称实例化实现类型,只需使用工厂 (Aes.Create())。这适用于 .NET Core 和 .NET Framework。

其他值得一提的事情:

  • 所有 SymmetricAlgorithm 实例都是 IDisposable,您应该在 using 语句中使用它们。
  • 所有 ICryptoTransform 实例(例如您错误命名的 desEncryptor)都是 IDisposable,您应该在 using 语句中使用它们。
  • ISO10126 填充在 .NET Core 1.0 中不可用。如果您需要与现有流兼容,您可以自己应用填充并指定 PaddingMode.None。否则,PKCS7 更标准。
  • 您的 AES key 不是很随机,因为它来自 ASCII 字符串(很多值都无效)。
    • Base64 至少有完整的取值范围
    • 通过 Rfc2898DeriveBytes 类的 PBKDF2(基于密码的 key 派生函数 2)允许共享字符串 secret 输入,可预测的噪声输出。
    • KeyAgreement 通常更好,但 .NET Core 1.0 中不提供 ECDH 和经典 DH。
  • 通常加密器应该让随机 IV 被计算(调用 aes.GenerateIV() 如果使用同一个对象进行多次操作)并将其与密文一起呈现。因此,加密采用 key 和明文并生成密文和 IV。解密获取( key 、IV、密文)并生成明文。

关于c# - 如何将 Rijndael 加密与 .Net Core 类库一起使用? (不是 .Net 框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38333722/

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