我有一个用于在代码中加密/解密数据的工作解决方案(如下),但是当我将项目升级到 时DOTNET6,RijndaelManaged 就变得过时了:
警告 SYSLIB0022“RijndaelManaged”已过时:“Rijndael 和 RijndaelManaged 类型已过时。使用 Aes 代替。
和
SYSLIB0023“RNGCryptoServiceProvider”已过时:“RNGCryptoServiceProvider 已过时”。要生成随机数,请使用 RandomNumberGenerator 静态方法之一。
现在我想将其更改为 Aes/RandomNumberGenerator,但希望保持输出的方式与原样相同。不幸的是,我不熟悉加密/解密。
有人可以帮助我重写当前的块以使用 Aes 来代替 - 或者至少帮助我如何改变它并保持公共方法以相同的方式工作?
我有完整的代码(它按原样工作)
using System.Security.Cryptography;
namespace MyApp;
internal static class AES
{
private static byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
{
byte[] encryptedBytes;
byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
using (MemoryStream ms = new())
{
using RijndaelManaged AES = new(); // This reports Warning SYSLIB0022 'RijndaelManaged' is obsolete: 'The Rijndael …Run Code Online (Sandbox Code Playgroud) 我需要创建一个PBKDF2-SHA256密码哈希,但是遇到了一些麻烦.
我下载了Bouncy Castle的回购,但在单元测试中找到了我想要的东西.
在这里找到了一些示例代码,但这只是SHA1.代码的关键点是:
/// <summary>
/// Computes the PBKDF2-SHA1 hash of a password.
/// </summary>
/// <param name="password">The password to hash.</param>
/// <param name="salt">The salt.</param>
/// <param name="iterations">The PBKDF2 iteration count.</param>
/// <param name="outputBytes">The length of the hash to generate, in bytes.</param>
/// <returns>A hash of the password.</returns>
private static byte[] PBKDF2(string password, byte[] salt, int iterations, int outputBytes)
{
var pdb = new Pkcs5S2ParametersGenerator();
pdb.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt,
iterations);
var key = (KeyParameter)pdb.GenerateDerivedMacParameters(outputBytes * 8);
return key.GetKey(); …Run Code Online (Sandbox Code Playgroud) 我刚刚注意到 .NET Standard 2.1/.NET Core 3.0 终于添加了一个用于 AES-GCM 加密的类。
然而,它的 API 似乎与通常的 .NET 加密类略有不同:它的Encrypt功能要求为密文和标签预先分配字节数组,而不是自己提供它们。不幸的是,文档中没有显示正确使用该类的示例。
我知道如何在理论上计算 AES 加密的预期密文大小,但我想知道这是否真的是“猜测”密文缓冲区大小的预期方法。通常加密库提供处理这些计算的函数。
有人有关于如何使用正确加密字节数组的示例AesGcm吗?