C\#디자인 모델 의 Strategy 전략 모델 해결 007 대 암호 위기 문제 예시

본 고 는 C\#디자인 모델 의 Strategy 전략 모델 이 007 대 암호 위기 문 제 를 해결 하 는 것 을 실례 로 서술 했다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
이론 적 정의
정책 모드 는 여러 개의 알고리즘 을 정의 합 니 다.이 알고리즘 들 은 클 라 이언 트 에서 임의로 전환 할 수 있 습 니 다.
2.예 를 들 어
수요 설명:007 로 열 카 지노 에서 도박 을 하 다가 갑자기 M 부인 의 급 전 을 받 고 즉시 아프리카 에 가서 DES 대칭 알고리즘 키 를 찾 아 적의 군*정*기*밀 을 해결 하 라 고 요구 했다.
1.(영*국*군*정*6*국)MI6=Military Intelligence 6  비*주전*구 군*사*기*비밀 문 서 를 캡 처 했 습 니 다.MD5,RAS,암호 화,복호화 로 풀 수 없습니다.
나중에 이 파일 이 DES 에 암호 화 되 어 대칭 키 를 찾 아야 풀 수 있 음 을 발견 하 였 다.
2.본드 는 아프리카 로 급히 달 려 가 목 표 는 하나 입 니 다.키 를 찾 습 니 다.
3.구체 적 인 코딩
1.보안 알고리즘 인 터 페 이 스 를 정의 합 니 다.암호 화 와 복호화 방법 이 있 습 니 다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Strategy
{
  public interface ISecurity
  {
    /// <summary>
    ///   
    /// </summary>
    /// <param name="EncryptString">      </param>
    /// <returns></returns>
    string Encrypt(string EncryptString);
    /// <summary>
    ///   
    /// </summary>
    /// <param name="EncryptString">      </param>
    /// <returns></returns>
    string Decrypt(string EncryptString);
  }
}

2.MD5 암호 화

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;
namespace Com.Design.Gof.Strategy
{
  public class MD5 : ISecurity
  {
    /// <summary>
    ///  MD5  
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public string Encrypt(string s)
    {
      byte[] b = Encoding.Default.GetBytes(s);
      b = new MD5CryptoServiceProvider().ComputeHash(b);
      string output = "";
      for (int i = 0; i < b.Length; i++)
        output += b[i].ToString("x").PadLeft(2, '0');
      return output;
    }
    /// <summary>
    /// MD5     
    /// </summary>
    /// <param name="EncryptString"></param>
    /// <returns></returns>
    public virtual string Decrypt(string EncryptString) { return string.Empty; }
  }
}

3.RSA 암호 화

using System;
using System.Text;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
namespace Com.Design.Gof.Strategy
{
  public class RSA:ISecurity
  {
    private static readonly string key=new RSACryptoServiceProvider().ToXmlString(true);
    /// <summary>
    /// RSA    
    /// </summary>
    /// <param name="xmlPublicKey">  :KEY   XML   ,       </param>
    /// <param name="EncryptString"></param>
    /// <returns></returns>
    public string Encrypt(string s)
    {
      try
      {
        byte[] PlainTextBArray;
        byte[] CypherTextBArray;
        string Result;
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.FromXmlString(key);
        PlainTextBArray = (new UnicodeEncoding()).GetBytes(s);
        CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
        Result = Convert.ToBase64String(CypherTextBArray);
        return Result;
      }
      catch { return "        ,     RSA       ,       "; }
    }
    /// <summary>
    /// RSA    
    /// </summary>
    /// <param name="xmlPrivateKey"></param>
    /// <param name="DecryptString"></param>
    /// <returns></returns>
    public string Decrypt(string s)
    {
       try
      {
      byte[] PlainTextBArray;
      byte[] DypherTextBArray;
      string Result;
      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
      rsa.FromXmlString(key);
      PlainTextBArray = Convert.FromBase64String(s);
      DypherTextBArray = rsa.Decrypt(PlainTextBArray, false);
      Result = (new UnicodeEncoding()).GetString(DypherTextBArray);
      return Result;
      }
       catch { return "        ,     RSA       ,       "; }
    }
  }
}

4.DES 암호 화

using System;
using System.Text;
using System.IO;
using System.Security.Cryptography;
 /// <summary>
///MethodResult      
/// </summary>
namespace Com.Design.Gof.Strategy
{
  public class DES:ISecurity
  {
    private static byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; //    
    //    key
    public string SymmetricKey { get; set; }
    /// <summary>
    ///   
    /// </summary>
    /// <param name="EncryptString">       </param>
    /// <param name="EncryptKey">    </param>
    /// <returns>             ,      </returns>
    public string Encrypt(string EncryptString)
    {
      byte[] byKey = null;
      byKey = System.Text.Encoding.UTF8.GetBytes(SymmetricKey.Substring(0, 8));
      DESCryptoServiceProvider des = new DESCryptoServiceProvider();
      byte[] inputByteArray = System.Text.Encoding.UTF8.GetBytes(EncryptString);
      MemoryStream ms = new MemoryStream();
      CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
      cs.Write(inputByteArray, 0, inputByteArray.Length);
      cs.FlushFinalBlock();
      return Convert.ToBase64String(ms.ToArray());
    }
    /// <summary>
    ///   
    /// </summary>
    /// <param name="EncryptString">       </param>
    /// <returns>             ,     </returns>
    public string Decrypt(string EncryptString)
    {
      byte[] byKey = null;
      byte[] inputByteArray = new Byte[EncryptString.Length];
      try
      {
        byKey = System.Text.Encoding.UTF8.GetBytes(SymmetricKey.Substring(0, 8));
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        inputByteArray = Convert.FromBase64String(EncryptString);
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);
        cs.FlushFinalBlock();
        System.Text.Encoding encoding = new System.Text.UTF8Encoding();
        return encoding.GetString(ms.ToArray());
      }
      catch
      {
        return "";
      }
    }
  }
}

5.(영*국*군*정*6*국)MI6=Military Intelligence 6

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Strategy
{
  /// <summary>
  /// ( * * * * * )MI6=Military Intelligence 6
  /// </summary>
  public class MilitaryIntelligence6
  {/// <summary>
    ///     
    /// </summary>
    private ISecurity Security { get; set; }
    /// <summary>
    ///      * * * 
    /// </summary>
    public string ClassifiedInfomation { get; set; }
    /// <summary>
    ///   
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public string Encrypt() {
      return Security.Encrypt(ClassifiedInfomation);
    }
    /// <summary>
    ///   
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public string Decrypt(string s) {
      return Security.Decrypt(s);
    }
  }
}

6.주 함수

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Design.Gof.Strategy;
namespace Com.Design.Gof.Test
{
  class Program
  {
    /// <summary>
    ///                ,    ,    
    /// </summary>
    /// <param name="args"></param>
    static void Main(string[] args)
    {
      MilitaryIntelligence6 MI6= new MilitaryIntelligence6
      {
        //       MD5
         Security = new MD5(),
        //      * * * 
        ClassifiedInfomation = @"+30/SxY2HZ0UtqUVNGMsad0zfajsHQmja1NVC+639zC6y0dE/8XDZJefMl0NwBJ+sUA8LC8k/IPEeTtFqW6OWaaZH9A+TNWzrJ6MSV2qiM3px6wFAyDkJsMKex0mJNe5",
      };
      //  MD5   
      string result_md5 = MI6.Encrypt();
      Console.WriteLine(" MD5   *     :" + result_md5);
      Console.WriteLine("MD5   ,      ,        ");
      Console.WriteLine();
      //  RSA   
      MI6.Security = new RSA();
      string Result_RSA = MI6.Encrypt();
      Console.WriteLine(Result_RSA);
      //  DES   
      string symmetricKey = "AfricaArea";//007    ,     
      MI6.Security = new DES { SymmetricKey = symmetricKey };
      //         : - - - - - :        * ,     :   ,  :500 ,  :2000 
      Console.WriteLine();
      Console.WriteLine("007    DES    ,     - - -   ,    :" + MI6.Decrypt(MI6.ClassifiedInfomation));
      Console.ReadKey();
    }
  }
}

7.운행 결과

8.총화
RSA 알고리즘 은 문자 가 너무 길 었 을 때 세그먼트 암호 화 를 어떻게 하 는 지 더 살 펴 볼 필요 가 있다.
외 로 운 늑대 빛 의 의견 을 참고 하여 매 거 와 Switch 를 제거 하고 클 라 이언 트 New 알고리즘 에 직접 있 습 니 다.
첨부:전체 인 스 턴 스 코드 는 여 기 를 클릭 하 십시오본 사이트 다운로드
PS:암호 화 복호화 에 관심 이 있 는 친 구 는 본 사이트 의 온라인 도 구 를 참고 할 수 있 습 니 다.
텍스트 온라인 암호 화 복호화 도구(AES,DES,RC4 등 포함):
http://tools.jb51.net/password/txt_encode
MD5 온라인 암호 화 도구:
http://tools.jb51.net/password/CreateMD5Password
온라인 해시/해시 알고리즘 암호 화 도구:
http://tools.jb51.net/password/hash_encrypt
온라인 MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160 암호 화 도구:
http://tools.jb51.net/password/hash_md5_sha
온라인 sha 1/sha 224/sha 256/sha 384/sha 512 암호 화 도구:
http://tools.jb51.net/password/sha_encode
더 많은 C\#관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,,,,,,,,,,,,,
본 고 에서 말 한 것 이 여러분 의 C\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기