C# Dotnet Core-如何处置RNGCryptoServiceProvider()
我得到警告:C# Dotnet Core-如何处置RNGCryptoServiceProvider(),c#,visual-studio,roslyn-code-analysis,C#,Visual Studio,Roslyn Code Analysis,我得到警告: 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.AUTHORISAT
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\1.0 - AURELIA\1.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${0}${1}", Convert.ToBase64String(encryptedDatabaseName), salt);
}
我使用的是Visual Studio 2019,它是Roslyn编译器。。我想摆脱这个警告
如何处理此问题?CA2000的意思是“在失去作用域之前处理对象”。从中,您可以尝试以下代码:
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
CA2000的意思是“在失去作用域之前处理对象”。从中,您可以尝试以下代码:
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
在
RNGCryptoServiceProvider
上调用Dispose()
,或使用块将其包装在中。参见文档示例:我尝试重现您使用的代码分析器?在RNGCryptoServiceProvider
上调用Dispose()
,或使用
块将其包装在中。参见文档示例:我试图重现您使用的代码分析器?