암호화 및 복호화에 관련된 Source 및 자세한 설명은 인터넷 검색을 해보면 많이 나오죠...

 

저의 경우에는 AJAX 방식으로 DB 접속을 위한 ConnectionString 을 Client 와 Server 간에 주고받기 위하여

아래의 암호화 및 복호화 코드를 사용하였습니다.

 

DB 접속을 위한 ConnectionString 에는 서버 정보와 DB 사용자 ID 및 Password 정보가 함께 포함되어 있죠...

그런데 이 정보를 서버에 저장할 수 없어서... (여러 특별한 상황으로 인하여...)

Client 에 암호화하여 저장했다가... 해당 값을 get 방식으로 Server 로 전달하고...

그 값을 다시 복호화하여 DB 접속을 하기 위하여 아래의 코드를 사용하였습니다.

 

아래 코드 중에서 유의해야 할 코드가 하나 있습니다.

바로... Decrypt 함수의

strKey = strKey.Replace(" ", "+");
문장입니다.

 

왜 암호화된 문자에서 " " 를 "+" 로 치환할까요?

 

이유는 바로 Web 상에서 GET 방식으로 Parameter 를 주고 받을때의 URLEncoding 에 있습니다.

이를 이해하기 위해서는 ToBase64String 과 FromBase64String 에 대한 이해가 필요합니다.

=================================================================================================

아래는 네이버의 ecaface 님의 글을 부분 참조하여 올립니다.(허락받지는 않았는데... 괜찮겠죠?)

=================================================================================================

 

위와 같은 이유로 암호화된 문자를 GET 방식으로 Web 에서 받고자 할때는...

바로... Decrypt 함수의

strKey = strKey.Replace(" ", "+"); 문장을 반드시 실행시켜 줘야 합니다.

 

그리고... 아래의 함수를 활용한 코드 부분도 함께 정리해서 올리도록 하겠습니다.

 

일단... 아래의 함수는 미리 참고하시길... 바랍니다.

 

 

다음은 DES(Data Encryption Standard) 알고리즘을 이용한 C# 에서의 암호화 / 복호화 Code 입니다.

 

암호화에 사용되는 Key 값을 선언합니다.

static byte[] pbyteKey;
pbyteKey = ASCIIEncoding.ASCII.GetBytes("password");

위의 pbyteKey 변수는 아래의 Encrypt 와 Decrypt 함수에서 정의되서 사용해도 됩니다.

단... 암호화하는데 쓰이는 Key 값은 동일해야 합니다.

아래의 Encrypt 와 Decrypt 함수를 선언합니다.

 

// 암호화 하고자 하는 Key 값(String) 을 받아서 DES 알고리즘으로 암호화한 문자열을 Return 함

public String Encrypt(String strKey)
{
   DESCryptoServiceProvider desCSP = new DESCryptoServiceProvider();
   desCSP.Mode = CipherMode.ECB;
   desCSP.Padding = PaddingMode.PKCS7;
   desCSP.Key = pbyteKey;
   desCSP.IV = pbyteKey;
   MemoryStream ms = new MemoryStream();
   CryptoStream cryptStream = new CryptoStream(ms, desCSP.CreateEncryptor(), CryptoStreamMode.Write);
   byte[] data = Encoding.UTF8.GetBytes(strKey.ToCharArray());
   cryptStream.Write(data, 0, data.Length);
   cryptStream.FlushFinalBlock();

   String strReturn = Convert.ToBase64String(ms.ToArray());
   cryptStream = null;
   ms = null;
   desCSP = null;
   return strReturn;
}

 

// DES 알고리즘으로 암호화된 문자열을 받아서 복호화 한 후 암호화 이전의 원래 문자열을 Return 함

public String Decrypt(String strKey)
{
   DESCryptoServiceProvider desCSP = new DESCryptoServiceProvider();
   desCSP.Mode = CipherMode.ECB;
   desCSP.Padding = PaddingMode.PKCS7;
   desCSP.Key = pbyteKey;
   desCSP.IV = pbyteKey;
   MemoryStream ms = new MemoryStream();
   CryptoStream cryptStream = new CryptoStream(ms, desCSP.CreateDecryptor(), CryptoStreamMode.Write);
   strKey = strKey.Replace(" ", "+");
   byte[] data = Convert.FromBase64String(strKey);
   cryptStream.Write(data, 0, data.Length);
   cryptStream.FlushFinalBlock();

   String strReturn = Encoding.UTF8.GetString(ms.GetBuffer());

   cryptStream = null;
   ms = null;
   desCSP = null;

   return strReturn;
}

위의 함수를 이용해서 URL Parameter 로 넘어갈 문자열을 암호화 하는 Code 는 아래와 같습니다.

String strParams = "";
String strSeperator = "@";
strParams += "DBSvr=dbServer";    // DB Server 명이 dbServer 라 가정
strParams += strSeperator + "DBNm=dbName";    // Database 명이 dbName 이라 가정
strParams += strSeperator + "DBUID=dbUserId";    // Database 에 접속할 수 있는 사용자  ID 가 dbUserId 라 가정
strParams += strSeperator + "DBUPW=dbUserPwd";    // dbUserId 의 비밀번호가 dbUserPwd 라 가정
strParams = Encrypt(strParams);    // 문자열을 DES 방식으로 암호화 하기 위한 함수를 호출

 

위의 strParams 를 URL Parameter 로 GET 또는 POST 방식으로 넘긴 후에...

Parameter 를 받는 부분에서는 아래와 같이 복호화 하여 사용합니다.

 

String strParams = Decrypt(strParams);

제가 사용한 Code 는 위와 같습니다.

 

이 외에도 암호화, 복호화에 관한 여러 글들이 인터넷에 많이 검색되고 있으니... 참고하시면...

이론적인 부분, 샘플 코드, 암호화/복호화 방식 등의 많은 내용을 참고하실 수 있으리라 생각됩니다.

http://blog.naver.com/bigkbhan?Redirect=Log&logNo=100120280249 여기서 가져옴

신고

'c#' 카테고리의 다른 글

암호화 및 복호화 c# code  (0) 2011.05.03
c# 인증  (1) 2011.04.05
쿠키 삭제  (0) 2011.03.23
xml 파일읽어 처리하는 예  (0) 2011.01.27
랜덤으로 문자열 생성  (0) 2010.10.29
클라이언트 IP 주소 가져오기  (0) 2010.10.29
by 화니뿡뿡 2011.05.03 14:33
| 1 2 3 4 ··· 6 |

티스토리 툴바