Dotnet Core - 如何处理 RNGCryptoServiceProvider()
Dotnet Core - How to dispose of RNGCryptoServiceProvider()
我收到警告:
Severity Code Description Project File Line Suppression State
Warning CA2000 Call System.IDisposable.Dispose on object created by 'new RNGCryptoServiceProvider()' before all references to it are out of scope. JobsLedger.AUTHORISATION C:\Users\simon\OneDrive\Documents.0 - AURELIA.0 - JobsLedgerSPA -ASPNET CORE 3.1\JobsLedger.AUTHORISATION\CryptoService.cs 96 Active
出现此警告的代码在此行:
new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
其用法如下:
public string EncryptdatabaseName(string text)
{
byte[] salt;
new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
using var aesAlg = Aes.Create();
using var encryptor = aesAlg.CreateEncryptor(salt, aesAlg.IV);
using var msEncrypt = new MemoryStream();
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (var swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(text);
}
var iv = aesAlg.IV;
var decryptedContent = msEncrypt.ToArray();
var encryptedDatabaseName = new byte[iv.Length + decryptedContent.Length];
Buffer.BlockCopy(iv, 0, encryptedDatabaseName, 0, iv.Length);
Buffer.BlockCopy(decryptedContent, 0, encryptedDatabaseName, iv.Length, decryptedContent.Length);
// Format hash with extra information
return string.Format(CultureInfo.CurrentCulture, "$DATABASENAME$V1[=12=]", Convert.ToBase64String(encryptedDatabaseName), salt);
}
我正在使用 Visual Studio 2019 及其抛出此问题的 Roslyn 编译器。我想摆脱警告。
我该如何处理这个?
CA2000 的意思是“在丢失范围之前处理对象”。从 official document,你可以试试这个代码:
using(RNGCryptoServiceProvider test = new RNGCryptoServiceProvider())
{
test.GetBytes(salt = new byte[SaltSize]);
}
如果你想直接抑制它,你可以使用这个代码,就像:
#pragma warning disable CA1062
new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
#pragma warning restore CA1062
我收到警告:
Severity Code Description Project File Line Suppression State
Warning CA2000 Call System.IDisposable.Dispose on object created by 'new RNGCryptoServiceProvider()' before all references to it are out of scope. JobsLedger.AUTHORISATION C:\Users\simon\OneDrive\Documents.0 - AURELIA.0 - JobsLedgerSPA -ASPNET CORE 3.1\JobsLedger.AUTHORISATION\CryptoService.cs 96 Active
出现此警告的代码在此行:
new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
其用法如下:
public string EncryptdatabaseName(string text)
{
byte[] salt;
new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
using var aesAlg = Aes.Create();
using var encryptor = aesAlg.CreateEncryptor(salt, aesAlg.IV);
using var msEncrypt = new MemoryStream();
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (var swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(text);
}
var iv = aesAlg.IV;
var decryptedContent = msEncrypt.ToArray();
var encryptedDatabaseName = new byte[iv.Length + decryptedContent.Length];
Buffer.BlockCopy(iv, 0, encryptedDatabaseName, 0, iv.Length);
Buffer.BlockCopy(decryptedContent, 0, encryptedDatabaseName, iv.Length, decryptedContent.Length);
// Format hash with extra information
return string.Format(CultureInfo.CurrentCulture, "$DATABASENAME$V1[=12=]", Convert.ToBase64String(encryptedDatabaseName), salt);
}
我正在使用 Visual Studio 2019 及其抛出此问题的 Roslyn 编译器。我想摆脱警告。
我该如何处理这个?
CA2000 的意思是“在丢失范围之前处理对象”。从 official document,你可以试试这个代码:
using(RNGCryptoServiceProvider test = new RNGCryptoServiceProvider())
{
test.GetBytes(salt = new byte[SaltSize]);
}
如果你想直接抑制它,你可以使用这个代码,就像:
#pragma warning disable CA1062
new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
#pragma warning restore CA1062