반응형
오늘은 암호화에 대해서 배웠는데 코드에 대한 정리가 명확히 되어있지 않아 암호화 코드 자체에 관한 것은 내용이 거의 없다시피하다..
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class Crypto
{
// 키로 사용하기 위한 암호
private static readonly string PASSWORD = "hellothisismyblog";
// 인증키 정의
private static readonly string KEY = PASSWORD.Substring(0, 128 / 8);
// 암호화
public static string AESEncrypt128(string plain)
{
byte[] plainBytes = Encoding.UTF8.GetBytes(plain);
// AES : 고급 암호화 표준
// 레인달(Rijndael) : 벨기에 공학자들 이름을 합쳐 만든 알고리즘 이름
RijndaelManaged rijndael = new RijndaelManaged();
// CipherMode : 암호화 모드 지정
// https://learn.microsoft.com/ko-kr/dotnet/api/system.security.cryptography.ciphermode?view=net-6.0
rijndael.Mode = CipherMode.CBC;
// PaddingMode : 메시지 데이터 블록이 암호화 작업에 필요한 전체 길이보다 짧을 때 뭘로 채울 것인지 결정
// https://learn.microsoft.com/ko-kr/dotnet/api/system.security.cryptography.paddingmode?view=net-6.0
rijndael.Padding = PaddingMode.PKCS7;
// KeySize : 패스워드 키 사이즈
// https://learn.microsoft.com/ko-kr/dotnet/api/system.security.cryptography.rijndaelmanaged.keysize?view=net-6.0#system-security-cryptography-rijndaelmanaged-keysize
rijndael.KeySize = 128;
MemoryStream memoryStream = new MemoryStream();
ICryptoTransform encryptor = rijndael.CreateEncryptor(Encoding.UTF8.GetBytes(KEY), Encoding.UTF8.GetBytes(KEY));
CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
cryptoStream.Write(plainBytes, 0, plainBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] encryptBytes = memoryStream.ToArray();
string encryptString = Convert.ToBase64String(encryptBytes);
cryptoStream.Close();
memoryStream.Close();
return encryptString;
}
public static string AESDecrypt128(string encrypt)
{
byte[] encryptBytes = Convert.FromBase64String(encrypt);
RijndaelManaged rijndael = new RijndaelManaged();
rijndael.Mode = CipherMode.CBC;
rijndael.Padding = PaddingMode.PKCS7;
rijndael.KeySize = 128;
MemoryStream memoryStream = new MemoryStream(encryptBytes);
ICryptoTransform decryptor = rijndael.CreateDecryptor(Encoding.UTF8.GetBytes(KEY), Encoding.UTF8.GetBytes(KEY));
CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
byte[] plainBytes = new byte[encryptBytes.Length];
int plainCount = cryptoStream.Read(plainBytes, 0, plainBytes.Length);
string plainString = Encoding.UTF8.GetString(plainBytes, 0, plainCount);
cryptoStream.Close();
memoryStream.Close();
return plainString;
}
}
이게 암호화 코드이다. 이 코드에 대해선 조금 더 뜯어보고 하나씩 설명할 수 있을 것 같다 ( _ _ )
어떤 식으로 함수를 쓸 수 있는지 사용을 해봤는데
쉽지 않다를 암호화 시켰다가 복호화 시키는 코드다. 처음에 어떻게 써야하지 멀뚱히 있다가 내가 암호화 시킨 방법이 맞구나를 친구가 알려줘 알았다... 혼자서 코드를 머릿속에 그려보고 구조를 짤 수 있는 법을 연습해야 한다. 1학년동안 아트로.. 생활을 해왔었어서 개발이 비교적 많이 뒤쳐진다.
하여튼 결과는 진짜로 암호화가 되어 신기하고 재미있었다.
이를 어디에 적용시킬 수 있을지 고민을 해보고 활용을 하면 된다! 빨리 개발 식견을 늘려야겠다.
반응형
'Unity, C#' 카테고리의 다른 글
[Unity C#] 코루틴(Coroutine) (0) | 2023.02.14 |
---|---|
[Unity C#] Addressables Asset System (어드레서블 에셋 시스템) (0) | 2022.11.29 |
[Unity C#] 변수와 자료형, 대입 연산자, 조건문, 반복문 (0) | 2022.10.11 |
[22.09.21] Unity 스크립트에서 Scene Popup하기 (0) | 2022.09.21 |
22.09.14 Coupling 커플링 (0) | 2022.09.14 |