.Net CoreクラスライブラリでRijndael暗号化を使用するにはどうすればよいですか? (.Net Frameworkクラスライブラリではありません)複数のプロジェクトで使用する共有.Net Coreライブラリを作成し、プロジェクト全体で同じRijndael暗号化を使用するEncryptメソッドとDecryptメソッドを実装する必要があります。
現在使用しているのは:
RijndaelとAESの実装は.Net Core 1.0リリースから欠落しているように見えます...基本クラスのみが含まれているようです。新しい.Net Core Class Libraryプロジェクトへの参照として追加されたRijndaelまたはAES暗号化の.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ではブロックサイズを変更できるが、AESではできないことです。 RijndaelManagedのデフォルトのブロックサイズはAESブロックサイズ(128ビット/ 16バイト)と同じであるため、実際にはAESを使用しています。
名前で実装タイプをインスタンス化する代わりに、ファクトリー(Aes.Create()
)を使用します。これは、.NET Coreと.NET Frameworkの両方で機能します。
言及する価値がある他のこと:
using
ステートメントで使用する必要があります。desEncryptor
など)はIDisposableです。using
ステートメントで使用する必要があります。aes.GenerateIV()
を呼び出し)、暗号文を提示します。したがって、encryptはキーとプレーンテキストを受け取り、暗号テキストとIVを生成します。復号化は(キー、IV、暗号文)を取り、平文を生成します。単に暗号化/復号化する場合は、asp.netコアには使いやすく、デフォルトで適切に保護される可能性が高い優れたラッパーがあるため、Rijndaelを直接使用しないでください。 DataProtectionとして知られています。
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}");
詳細については、 data protection docs を参照してください