출처: http://choiwonwoo.egloos.com/669096
using System; using System.Security; using System.Security.Cryptography; using System.Text; using System.IO; namespace myNameSpace { /// <summary> /// Crypt에 대한 요약 설명입니다. /// </summary> public class Crypt { // 암호화 키 private const string desKey = ".........."; public Crypt() { // // TODO: 여기에 생성자 논리를 추가합니다. // } //------------------------------------------------------------------------ #region MD5 Hash public static string MD5HashCrypt(string val) { byte[] data = Convert.FromBase64String(val); // This is one implementation of the abstract class MD5. MD5 md5 = new MD5CryptoServiceProvider(); byte[] result = md5.ComputeHash(data); return Convert.ToBase64String(result); } #endregion //MD5 Hash //------------------------------------------------------------------------ #region DES암복호화 // Public Function public static string DESEncrypt(string inStr) { return DesEncrypt(inStr, desKey); } //문자열 암호화 private static string DesEncrypt(string str, string key) { //키 유효성 검사 byte[] btKey = ConvertStringToByteArrayA(key); //키가 8Byte가 아니면 예외발생 if (btKey.Length != 8) { throw (new Exception("Invalid key. Key length must be 8 byte.")); } //소스 문자열 byte[] btSrc = ConvertStringToByteArray(str); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Key = btKey; des.IV = btKey; ICryptoTransform desencrypt = des.CreateEncryptor(); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, desencrypt, CryptoStreamMode.Write); cs.Write(btSrc, 0, btSrc.Length); cs.FlushFinalBlock(); byte[] btEncData = ms.ToArray(); return (ConvertByteArrayToStringB(btEncData)); }//end of func DesEncrypt // Public Function public static string DESDecrypt(string inStr) // 복호화 { return DesDecrypt(inStr, desKey); } //문자열 복호화 private static string DesDecrypt(string str, string key) { //키 유효성 검사 byte[] btKey = ConvertStringToByteArrayA(key); //키가 8Byte가 아니면 예외발생 if (btKey.Length != 8) { throw (new Exception("Invalid key. Key length must be 8 byte.")); } byte[] btEncData = ConvertStringToByteArrayB(str); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Key = btKey; des.IV = btKey; ICryptoTransform desdecrypt = des.CreateDecryptor(); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, desdecrypt, CryptoStreamMode.Write); cs.Write(btEncData, 0, btEncData.Length); cs.FlushFinalBlock(); byte[] btSrc = ms.ToArray(); return (ConvertByteArrayToString(btSrc)); }//end of func DesDecrypt //문자열->유니코드 바이트 배열 private static Byte[] ConvertStringToByteArray(String s) { return (new UnicodeEncoding()).GetBytes(s); } //유니코드 바이트 배열->문자열 private static string ConvertByteArrayToString(byte[] b) { return (new UnicodeEncoding()).GetString(b, 0, b.Length); } //문자열->안시 바이트 배열 private static Byte[] ConvertStringToByteArrayA(String s) { return (new ASCIIEncoding()).GetBytes(s); } //안시 바이트 배열->문자열 private static string ConvertByteArrayToStringA(byte[] b) { return (new ASCIIEncoding()).GetString(b, 0, b.Length); } //문자열->Base64 바이트 배열 private static Byte[] ConvertStringToByteArrayB(String s) { return Convert.FromBase64String(s); } //Base64 바이트 배열->문자열 private static string ConvertByteArrayToStringB(byte[] b) { return Convert.ToBase64String(b); } #endregion //DES암복호화 //------------------------------------------------------------------------ #region RSA암복호화 //RSA 암호화 public static string RSAEncrypt(string sValue, string sPubKey) { //공개키 생성 byte[] keybuf = Convert.FromBase64String(sPubKey); sPubKey = (new UTF8Encoding()).GetString(keybuf); System.Security.Cryptography.RSACryptoServiceProvider oEnc = new RSACryptoServiceProvider(); //암호화 oEnc.FromXmlString(sPubKey); //암호화할 문자열을 UFT8인코딩 byte[] inbuf = (new UTF8Encoding()).GetBytes(sValue); //암호화 byte[] encbuf = oEnc.Encrypt(inbuf, false); //암호화된 문자열 Base64인코딩 return Convert.ToBase64String(encbuf); } //RSA 복호화 public static string RSADecrypt(string sValue, string sPrvKey) { //개인키 생성 byte[] inbuf = Convert.FromBase64String(sPrvKey); sPrvKey = (new UTF8Encoding()).GetString(inbuf); //RSA객체생성 System.Security.Cryptography.RSACryptoServiceProvider oDec = new RSACryptoServiceProvider(); //복호화 //개인키로 활성화 oDec.FromXmlString(sPrvKey); //sValue문자열을 바이트배열로 변환 byte[] srcbuf = Convert.FromBase64String(sValue); //바이트배열 복호화 byte[] decbuf = oDec.Decrypt(srcbuf, false); //복호화 바이트배열을 문자열로 변환 string sDec = (new UTF8Encoding()).GetString(decbuf, 0, decbuf.Length); return sDec; } #endregion } }
trackback from: [C#.NET]Nullable type 이란
답글삭제nullable.txt 일반적으로 데이타형중에서 숫자형은 NULL 값을 가질 수 없는게 보통이죠. 하지만 데이터 베이스에서는 NULL 값을 가질수 있습니다. 그래서 C#2.0 부터는 Nullable 이라는 좀 특이한 아이가 생겨났습니다. Nullable<T> Nullable형은 숫자형의 변수를 선언하고 그 숫자 변수뒤에 [?](물음표) 를 붙혀서 사용합니다. 이 기호를 붙임으로 해서 숫자형 임에도 불구하고 null 값을 대입받는 것이 가능해 집니다...