Wie verwenden wir die Rijndael-Verschlüsselung in einer .NET Core-Klassenbibliothek? (Keine .Net Framework-Klassenbibliothek) Wir müssen eine gemeinsam genutzte .Net Core-Bibliothek für die Verwendung in mehreren Projekten erstellen und Encrypt- und Decrypt-Methoden implementieren, die die gleiche Rijndael-Verschlüsselung für die Projekte verwenden.
Wir verwenden derzeit:
Es scheint, dass die Implementierung von Rijndael und AES in der .Net Core 1.0-Version fehlt ... es scheint nur die Basisklassen zu umfassen. Wie erhalten wir eine .Net Core-Implementierung der Rijndael- oder AES-Verschlüsselung als Referenz für ein neues .Net Core Class Library-Projekt?
Hier ist die Encrypt-Methode, die in .NET Framework 4.5.2 funktioniert:
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;
}
Der Unterschied (in .NET) zwischen Rijndael und AES besteht darin, dass Rijndael die Änderung der Blockgröße zulässt, AES jedoch nicht. Da die Standardblockgröße von RijndaelManaged der AES-Blockgröße (128 Bit/16 Byte) entspricht, verwenden Sie AES.
Anstatt den Implementierungstyp anhand des Namens zu instanziieren, verwenden Sie einfach die Factory (Aes.Create()
). Das funktioniert sowohl in .NET Core als auch in .NET Framework.
Andere erwähnenswerte Dinge:
using
-Anweisung verwenden.desEncryptor
) sind IDisposable. Sie sollten sie in einer using
-Anweisung verwenden.aes.GenerateIV()
, wenn dasselbe Objekt für mehrere Operationen verwendet wird) und mit dem Chiffretext versehen. Verschlüsseln nimmt also einen Schlüssel und Klartext und erzeugt einen Geheimtext und IV. Decrypt nimmt (Schlüssel, IV, Geheimtext) und erzeugt Klartext.Wenn Sie nur Dinge verschlüsseln/entschlüsseln möchten, vermeiden Sie die direkte Verwendung von Rijndael, da der asp.net-Kern einige schönere Wrapper hat, die viel einfacher zu verwenden sind und wahrscheinlich standardmäßig ordnungsgemäß gesichert sind. Es ist als DataProtection bekannt.
using Microsoft.AspNetCore.DataProtection;
// During startup add DP
serviceCollection.AddDataProtection();
...
// the 'provider' parameter is provided by DI
public MyClass(IDataProtectionProvider provider)
{
_protector = provider.CreateProtector("Contoso.MyClass.v1");
}
...
// protect the payload
string protectedPayload = _protector.Protect(input);
Console.WriteLine($"Protect returned: {protectedPayload}");
...
// unprotect the payload
string unprotectedPayload = _protector.Unprotect(protectedPayload);
Console.WriteLine($"Unprotect returned: {unprotectedPayload}");
Weitere Informationen finden Sie in den Datenschutzdokumenten