C# での AES 暗号化
このガイドでは、C# での AES 暗号化について学習します。
C#
での AES 暗号化
私たちが話しているアルゴリズムは、AES または Advanced Encryption Standard です。 この対称的に暗号化されたアルゴリズムは、送信者と受信者の両方に、同じキーを使用してデータを暗号化または復号化する許可を与えます。
このアルゴリズムは、3 ビット暗号化モードをサポートしています。 128、192、および 256 ビットの暗号化。
AES は、暗号化されたキーを作成するのに役立ち、使用する必要のあるクラスと関数を提供します。 政府および民間企業は、高度な暗号化標準 (AES) をテストしました。
C#
での AES 暗号化の作業
ライブラリ System.Security.Cryptography
は、暗号化されたキーを作成するために必要なすべてのメソッドに使用されます。 それでは、このライブラリで使用されるクラス CryptoStream
と MemoryStream
について説明しましょう。
CryptoStream
は、上記のモードからの任意のストリームを格納します。 コンパイラがモードをサポートしている場合、任意のストリームを暗号化および復号化できます。
クラス MemoryStream
は、クラスがストリームを実装するためにストリームを格納するときに使用されます。 この場合、CryptoStream
が使用されているため、MemoryStream
がストリームを実装します。
次に使用されるクラスは、AES アルゴリズムを管理する AesManaged
です。 最後に使用されるクラスは StreamWriter
で、ストリームに文字を書き込むため、AES 暗号化を使用する必要がある場合は、このクラスを使用することが不可欠です。
コードに入る前に、例外処理を使用することが重要です。
コード - メイン クラス:
using System;
using System.IO;
using System.Security.Cryptography;
namespace ConsoleApp1 {
class Program {
static void Main(string[] args) {
Console.WriteLine("Write any string to encrypt: ");
string text = Console.ReadLine();
EncryptedDATA(text); // write text to be encrypted
Console.Read();
}
}
}
コード - ユーザーからの文字列入力を受け取る関数:
static void EncryptedDATA(string TextToEncrypt) {
try {
using (AesManaged dataEncrypt = new AesManaged()) {
byte[] TextEncrypted = Encrypt(TextToEncrypt, dataEncrypt.Key, dataEncrypt.IV);
// passing the string data inside the Encrypt() function
string myLine = $"the data encrypted is:{System.Text.Encoding.UTF8.GetString(TextEncrypted)}";
Console.WriteLine(myLine); // printing the encrypted data
}
} catch (Exception EX) // exception handling
{
Console.WriteLine(EX.Message);
}
}
コード - データを暗号化する関数:
static byte[] Encrypt(string TextToEncrypt, byte[] encrypt, byte[] IV) {
byte[] EncryptedText;
using (AesManaged AESencrypt = new AesManaged()) // using a AesManaged function
{
ICryptoTransform DataEncrypt =
AESencrypt.CreateEncryptor(encrypt, IV); // here we are creating an encryptor
using (MemoryStream memory = new MemoryStream()) // using a MemoryStream function
{
using (CryptoStream crypto = new CryptoStream(memory, DataEncrypt, CryptoStreamMode.Write))
// using a CryptoStream function to store and write stream
{
{
using (StreamWriter stream = new StreamWriter(crypto))
stream.Write(TextToEncrypt); // wrting stream
EncryptedText = memory.ToArray(); // storing stream
}
}
}
return EncryptedText;
}
AES 暗号化での操作中にエラーが表示される場合があります。 これらのエラーを処理するには、例外処理を使用します。
完全なソース コード:
using System;
using System.IO;
using System.Security.Cryptography;
class Program {
static void Main(string[] args) {
Console.WriteLine("Write any string to encrypt: ");
string text = Console.ReadLine();
EncryptedDATA(text); // write text to be encrypted
Console.Read();
}
static void EncryptedDATA(string TextToEncrypt) {
try {
using (AesManaged dataEncrypt = new AesManaged()) {
byte[] TextEncrypted = Encrypt(TextToEncrypt, dataEncrypt.Key, dataEncrypt.IV);
// passing the string data inside the Encrypt() function
string myLine =
$"the data encrypted is: {System.Text.Encoding.UTF8.GetString(TextEncrypted)}";
Console.WriteLine(myLine); // printing the encrypted data
}
} catch (Exception EX) // exception handling
{
Console.WriteLine(EX.Message);
}
}
static byte[] Encrypt(string TextToEncrypt, byte[] encrypt, byte[] IV) {
byte[] EncryptedText;
using (AesManaged AESencrypt = new AesManaged()) // using a AesManaged function
{
ICryptoTransform DataEncrypt =
AESencrypt.CreateEncryptor(encrypt, IV); // here we are creating an encryptor
using (MemoryStream memory = new MemoryStream()) // using a MemoryStream function
{
using (
CryptoStream crypto = new CryptoStream(
memory, DataEncrypt,
CryptoStreamMode.Write)) // using a CryptoStream function to store and write stream
{
{
using (StreamWriter stream = new StreamWriter(crypto))
stream.Write(TextToEncrypt); // wrting stream
EncryptedText = memory.ToArray(); // storing stream
}
}
}
return EncryptedText;
}
}
}
出力:
Write any string to encrypt:
Hello
the data encrypted is: ??*?2?@???W@G?
上記のコードは、すべてのメッセージを暗号化します。 データが暗号化されると、ユーザーのみがアクセスできます。
このデータを読み取る方法は、復号化することです。 その後、データのみが表示されます。
Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.
LinkedIn