반응형
.NET은 대칭 및 비대칭의 다양한 암호화 알고리즘에 대한 상위 수준 클래스를 제공합니다. AES(Advanced Encryption Standard)는 송신자, 수신자 모두가 동일한 키를 사용하여 데이터를 암호화하고 해독할 수 있도록 하는 대칭 암호화 알고리즘 중 하나입니다.
AES는 두 명의 벨기에 암호학자 Vincent Rijmen과 Jan Daemen이 개발했습니다. 2001년에 AES는 미국 국립표준기술연구소(NIST)에 의해 암호화 표준으로 선정되었습니다. AES는 128, 192, 256비트 키 크기와 128비트 크기를 지원합니다.
AesManaged 클래스는 AES 알고리즘의 관리형 구현입니다. 이 문서에서는 AesManaged 클래스를 사용하여 AES 알고리즘을 적용하여 .NET 및 C#에서 데이터를 암호화하고 해독하는 방법을 보여줍니다.
AesManaged를 사용하여 데이터를 암호화하려면 다음 단계가 필요합니다.
1 단계
AesManaged를 생성하고,
AesManaged aes = new AesManaged();
2 단계
암호화기 생성,
ICryptoTransform encryptor = aes.CreateEncryptor(Key, IV);
3단계
MemoryStream을 생성하고,
MemoryStream ms = new MemoryStream();
4단계
MemoryStream 및 Encrypter에서 CryptoStream을 생성하고 작성합니다.
using(CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
// Create StreamWriter and write data to a stream
using(StreamWriter sw = new StreamWriter(cs))
sw.Write(plainText);
encrypted = ms.ToArray();
}
전체 코드는 목록 1에 나열되어 있습니다. 코드를 테스트하려면 Visual Studio에서 .NET Core 프로젝트를 만들고 코드를 복사하여 붙여넣습니다.
using System;
using System.IO;
using System.Security.Cryptography;
class ManagedAesSample {
public static void Main() {
Console.WriteLine("Enter text that needs to be encrypted..");
string data = Console.ReadLine();
EncryptAesManaged(data);
Console.ReadLine();
}
static void EncryptAesManaged(string raw) {
try {
// Create Aes that generates a new key and initialization vector (IV).
// Same key must be used in encryption and decryption
using(AesManaged aes = new AesManaged()) {
// Encrypt string
byte[] encrypted = Encrypt(raw, aes.Key, aes.IV);
// Print encrypted string
Console.WriteLine($ "Encrypted data: {System.Text.Encoding.UTF8.GetString(encrypted)}");
//decrypt the bytes to a string.
string decrypted = Decrypt(encrypted, aes.Key, aes.IV);
// Print decrypted string. It should be same as raw data
Console.WriteLine($ "Decrypted data: {decrypted}");
}
} catch (Exception exp) {
Console.WriteLine(exp.Message);
}
Console.ReadKey();
}
static byte[] Encrypt(string plainText, byte[] Key, byte[] IV) {
byte[] encrypted;
// Create a new AesManaged.
using(AesManaged aes = new AesManaged()) {
// Create encryptor
ICryptoTransform encryptor = aes.CreateEncryptor(Key, IV);
// Create MemoryStream
using(MemoryStream ms = new MemoryStream()) {
// Create crypto stream using the CryptoStream class. This class is the key to encryption
// and encrypts and decrypts data from any given stream. In this case, we will pass a memory stream
// to encrypt
using(CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) {
// Create StreamWriter and write data to a stream
using(StreamWriter sw = new StreamWriter(cs))
sw.Write(plainText);
encrypted = ms.ToArray();
}
}
}
// Return encrypted data
return encrypted;
}
static string Decrypt(byte[] cipherText, byte[] Key, byte[] IV) {
string plaintext = null;
// Create AesManaged
using(AesManaged aes = new AesManaged()) {
// Create a decryptor
ICryptoTransform decryptor = aes.CreateDecryptor(Key, IV);
// Create the streams used for decryption.
using(MemoryStream ms = new MemoryStream(cipherText)) {
// Create crypto stream
using(CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) {
// Read crypto stream
using(StreamReader reader = new StreamReader(cs))
plaintext = reader.ReadToEnd();
}
}
}
return plaintext;
}
}
반응형