Common Tip/보안(Security)2009. 8. 11. 11:01
 DES 암호 예제  | 보안 프로그래밍

민범규님의 글(Devpia 펌)
2009-08-09 오후 7:15:36

암호화에 관련하여  이제 까지 거의 무관심하다가

국세청 세금계산서 관련 개발 설명서 보니 기본은 알아야

할것 같아 MSDN등 찾아 보고 있읍니다.

 

공부하면서 테슽트 한 내용 올려봅니다

제 같은 조보자를 위한것입니다.

 

모든 예제는 DESCryptoServiceProvider 등에서 자동으로 생성된

Key,IV을 사용하는데

전 이것은 테스트박스에서 입력받게 약간 고쳤읍니다.

 

DESCryptoServiceProvider

예외

상황

CryptographicException

데이터 암호화 표준( DES) 암호화 서비스 공급자를 사용할 없는 경우


 
 
아래는 구글에서 찾아 보고 복사한 내용입니다
DES(Data Encryption Standard)블록 암호의 일종으로, 미국 NBS (National Bureau of Standards, 현재 NIST)에서 국가 표준으로 정한 암호이다. DES대칭키 암호이며, 56비트의 키를 사용한다.

DES개인키를 사용하여 데이터를 암호화하는 방법으로서 널리 사용되며, 미국 정부는 이 알고리즘을 해독하기 어렵다고 판정하고 다른 나라들에 수출하는 것을 금지하고 있다. DES에는 72,000,000,000,000,000 (72천조)개 이상의 암호 키가 사용되는 것이 가능하다. 주어진 각 메시지를 위한 키는, 이렇게 막대한 량의 키 중에서 무작위로 선택된다. 다른 개인키 암호화 방법과 마찬가지로, 송신자와 수신자 둘 모두는 동일한 개인키를 알고, 사용해야만 한다.

DES는 각 64 비트 데이터 블록에, 56 비트 길이의 키를 적용한다. 이 과정은 여러 가지 모드에서 실행될 수 있으며, 16번의 연산이 수반된다. 비록 DES가 강력한 암호화이라고 판단되고는 있지만, 많은 회사들은 세 개의 키가 잇달아 적용되는 "트리플 DES"를 사용한다. 그렇다고 해서 DES로 암호화된 메시지가 해독될 수 없다고 말하는 것은 아니다. 1997년 초에, 다른 암호화 방식의 소유자인 RSA DES 메시지 해독에 10,000 달러의 상금을 걸었다. 인터상에서 14,000명 이상의 사용자들이 다양한 키들을 시험하는 공동 노력으로 결국 그 메시지를 해독하였는데, 가능한 72천조 개의 키 중에서 고작 18천조 개의 시험을 통해 그 키가 발견되었다. 그러나, 오늘날 DES 암호화로 발송되는 것 중, 이러한 종류의 코드 해독 노력에 영향을 받을 것 같은 메시지는 거의 없다.

DES 1977년에 IBM에서 발명하였으며, 미국 국방부에 의해 채택되었다. 이것은 ANSI X3.92 X3.106 표준 및 미국 연방정부 FIPS 46 81 표준에 정의되어 있다. 이 암호화 알고리즘이 비우호적인 국가에 의해 사용될 수 있다는 염려 때문에, 미국 정부는 암호화 소프트웨어의 수출을 막고 있다. 그러나, 이 소프트웨어의 프리버전은 BBS나 웹사이트 등에서 어렵잖게 입수할 수 있다. 이 암호화 알고리즘이 깨지지 않고 비교적 오래 남아있을 것이라는 일부 관심이 있지만, NIST DES를 대체하기 위한 새로운 표준이나 대안에 관한 작업이 진행중이므로 DES를 다시 인증하는 일은 없을 것이라고 지적했다. 그후 2001년에 DES를 대체하는 표준으로 AES (Advanced Encryption Standard)가 선정되었다.

 

테스트 예제

1 미리보기


// 초기화

private void DesCryptoDemo_Load(object sender, EventArgs e)

        {

            textBox1.Text = "가나다라마바사아자차카타파하";

            textBox1.Text += "\r\n1234567890";

            textBox1.Text += "\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ";

            textBox1.Text += "\r\nabcdefghijklmnopqrstuvwxyz";

            txtKey.Text = "12345678";//필히 8자리

            txtIV.Text = "12345678";//필히 8자리

        }

 

//암호화

        private void button1_Click(object sender, EventArgs e)

        {                  

            DESCryptoServiceProvider DesKey = new DESCryptoServiceProvider();

            DesKey.Key = Encoding.Default.GetBytes(txtKey.Text);

            DesKey.IV = Encoding.Default.GetBytes(txtIV.Text);

                                                

            MemoryStream ms = new MemoryStream();

            CryptoStream encStream = new CryptoStream(ms, DesKey.CreateEncryptor(), CryptoStreamMode.Write);

 

            StreamWriter sw = new StreamWriter(encStream);

            sw.Write(textBox1.Text);

            sw.Close();

            encStream.Close();

 

            textBox2.Text = Convert.ToBase64String(ms.ToArray());

            ms.Close();

        }

 

 

//복호화 

        private void btn복호화_Click(object sender, EventArgs e)

        {

            DESCryptoServiceProvider DesKey = new DESCryptoServiceProvider();

            DesKey.Key = Encoding.Default.GetBytes(txtKey.Text);

            DesKey.IV = Encoding.Default.GetBytes(txtIV.Text);

           

            byte[] buffer = Convert.FromBase64String(textBox2.Text);

            MemoryStream ms = new MemoryStream(buffer);

 

            ICryptoTransform ct = DesKey.CreateDecryptor();

            CryptoStream encStream = new CryptoStream(ms, ct, CryptoStreamMode.Read);

            StreamReader sr = new StreamReader(encStream);

            textBox3.Text = sr.ReadToEnd();

            sr.Close();

            encStream.Close();

            ms.Close();

        }



번호: 1749 추천:0  / 읽음:42

Posted by penguindori
2009/2009년 계획2009. 8. 10. 12:31
[9월1일~9월31일]
 ※ 하나 프로젝트 완성
    환경 : 옴니아, .Net Compact framwork3.5, 
            Visual Stdio 2008, Oracle 11g
            Project Name : Firend's Mangement 1.0v
    기능 : [Wi-Fi를 통한 메신저 + Wi-Fi를 통한 P2P, 전화,
             문자, 일정 공지, 가계부(추후 개인 가계부예정)
]
 1. 설계 (스토리 보드)       
     - 일정 : 09/03 ~ 09/05
  
  2. 코드 구조 설계 및 디자인 패턴 구조 설계
     - 일정 : 09/06 ~ 09/10
  
 첫째날(09/01:화)
 휴식 - 몽산포 1일차

 둘째날(09/02:수)
 휴식 - 몽산포 2일차

 셋째날(09/03:목)
 

 네째날(09/04:금)
 

 다섯째날(09/05:토)
 

9월달 한달 정하고 하자 ㅡ0ㅡ 다시 계획

Posted by penguindori