ASE-256 / SHA-512 암호화 [ C# ]

정보통신망 이용촉진 및 정보보호 등에 관한 법률을 보면 제28조 개인정보의 보호조치에는 이러한 내용이 있습니다.

” 개인정보를 안전하게 저장·전송할 수 있는 암호화기술 등을 이용한 보안조치 “
그리고 개인정보의 기술적 관리적 보호조치 기준 해설서 2012. 9 를 보면 단방향 해쉬함수와 양방향 암호화 방식에 대해 권고안이 마련되어 있는데, 두 방식 모두 128bit 이상을 권고하고 있으며, SHA-224 의 경우 애매한 문구인 ’2013년까지 권고함’ 이라는 설명이 추가돼있는데요. ASE-256 , SHA-512 는 권고안의 내용 중 가장 큰 비트수의 방식입니다.


// SHA-512 HASH
public static string EncryptSHA512(string Data)
{
SHA512 sha = new SHA512Managed();
byte[] hash = sha.ComputeHash(Encoding.ASCII.GetBytes(Data));
StringBuilder stringBuilder = new StringBuilder();
foreach (byte b in hash)
{
stringBuilder.AppendFormat(“{0:x2}”, b);
}
return stringBuilder.ToString();
}

// ASE-256 암호화 / 복호화

// 암호화에 사용할 32bytes 의 키 값.
private static readonly string defaultKeyASE256 = “ABCDEABCDEABCDEABCDEABCDEABCDEAB”;

// 암호화
public static String AESEncrypt256(String Input)
{
RijndaelManaged aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.Key = Encoding.UTF8.GetBytes(defaultKeyASE256);
aes.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] xBuff = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
{
byte[] xXml = Encoding.UTF8.GetBytes(Input);
cs.Write(xXml, 0, xXml.Length);
}

xBuff = ms.ToArray();
}

String Output = Convert.ToBase64String(xBuff);
return Output;
}

// 복호화
public static String AESDecrypt256(String Input)
{
RijndaelManaged aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.Key = Encoding.UTF8.GetBytes(defaultKeyASE256);
aes.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

var decrypt = aes.CreateDecryptor();
byte[] xBuff = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))
{
byte[] xXml = Convert.FromBase64String(Input);
cs.Write(xXml, 0, xXml.Length);
}

xBuff = ms.ToArray();
}

String Output = Encoding.UTF8.GetString(xBuff);
return Output;
}


Top