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\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.