일반 사본을 클립보드 인쇄로 보시겠습니까?
//네임스페이스
시스템 사용;
System.Security.Cryptography를 사용합니다.
System.IO 사용;
System.Text 사용;
//방법
//암호화 방법
공개 문자열 암호화(문자열 pToEncrypt, 문자열 sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//문자열을 바이트 배열에 넣습니다.
//원래 유니코드 인코딩으로 사용하던 UTF8 인코딩을 변경했는데 작동하지 않습니다.
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//암호화된 객체의 키와 오프셋을 설정합니다.
//원본 텍스트는 ASCIIEncoding.ASCII 메서드의 GetBytes 메서드를 사용합니다.
//비밀번호 입력시 영문을 필수로 입력하도록 합니다.
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
//바이트 배열을 암호화 스트림에 씁니다.
//(메모리 스트림에서 종료됩니다)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//메모리 스트림에서 데이터를 다시 가져와 문자열로 가져옵니다.
StringBuilder ret = new StringBuilder();
foreach(ms.ToArray()의 바이트 b)
{
//16진수로 포맷
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
ret.ToString()을 반환합니다.
}
//복호화 방법
공개 문자열 Decrypt(문자열 pToDecrypt, 문자열 sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//입력 문자열을 바이트 배열에 넣습니다.
byte[] inputByteArray = 새 바이트[pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (바이트)i;
}
//암호화된 객체의 키와 오프셋을 설정합니다. 이 값은 중요하며 수정할 수 없습니다.
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
//암호화 스트림을 통해 데이터를 메모리 스트림으로 플러시합니다.
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//메모리 스트림에서 해독된 데이터를 다시 가져옵니다.
//StringBuild 객체를 생성합니다. CreateDecrypt는 스트림 객체를 사용하며, 해독된 텍스트는 스트림 객체로 변환되어야 합니다.
StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
//-------코드 완성---------
//네임스페이스
시스템 사용;
System.Security.Cryptography를 사용합니다.
System.IO 사용;
System.Text 사용;
//방법
//암호화 방법
공개 문자열 암호화(문자열 pToEncrypt, 문자열 sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//문자열을 바이트 배열에 넣습니다.
//원래 유니코드 인코딩으로 사용하던 UTF8 인코딩을 변경했는데 작동하지 않습니다.
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//암호화된 객체의 키와 오프셋을 설정합니다.
//원본 텍스트는 ASCIIEncoding.ASCII 메서드의 GetBytes 메서드를 사용합니다.
//비밀번호 입력시 영문을 필수로 입력하도록 합니다.
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
//바이트 배열을 암호화 스트림에 씁니다.
//(메모리 스트림에서 종료됩니다)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//메모리 스트림에서 데이터를 다시 가져와 문자열로 가져옵니다.
StringBuilder ret = new StringBuilder();
foreach(ms.ToArray()의 바이트 b)
{
//16진수로 포맷
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
ret.ToString()을 반환합니다.
}
//복호화 방법
공개 문자열 Decrypt(문자열 pToDecrypt, 문자열 sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//입력 문자열을 바이트 배열에 넣습니다.
byte[] inputByteArray = 새 바이트[pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (바이트)i;
}
//암호화된 객체의 키와 오프셋을 설정합니다. 이 값은 중요하며 수정할 수 없습니다.
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
//암호화 스트림을 통해 데이터를 메모리 스트림으로 플러시합니다.
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//메모리 스트림에서 해독된 데이터를 다시 가져옵니다.
//StringBuild 객체를 생성합니다. CreateDecrypt는 스트림 객체를 사용하며, 해독된 텍스트는 스트림 객체로 변환되어야 합니다.
StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
//------코드 완성-------
참고: sKey에 비밀번호를 입력할 때 대소문자를 구분하는 영문자를 사용해야 하며, 문자 수는 8자이며, 그렇지 않으면 오류가 발생합니다.
Windows2000 Server .Net Framework SP3을 사용하고 있는데 VS.Net의 asp.net에서 성공적으로 사용되며 암호화, 복호화도 정상입니다!