집 >백엔드 개발 >C#.Net 튜토리얼 >Asp.net,C# 암호화 및 암호 해독 문자열
먼저 web.config | app.config 파일에 다음 코드를 추가합니다.
IV: 암호화 알고리즘의 초기 벡터.
키: 암호화 알고리즘의 키입니다.
그런 다음 암호화 도우미 클래스로 CryptoHelper라는 새 클래스를 만듭니다.
먼저 구성 파일에서 IV와 키를 가져옵니다. 따라서 기본 코드는 다음과 같습니다.
public class CryptoHelper
{
//private readonly string IV = "SuFjcEmp/TE="
private readonly string IV = string.Empty; //개인 읽기 전용 문자열 Key = "KIPSToILGp6fl+3gXJvMsN4IajizYBBT";
개인 읽기 전용 문자열 Key = string.Empty;
///
}
}
System.Configuration.dll 어셈블리 추가에 주의하세요. 참조.
IV와 Key를 획득한 후 암호화 서비스를 제공하는 Service 클래스를 획득해야 합니다.
여기서는 System.Security.Cryptography 네임스페이스 아래의 TripleDESCryptoServiceProvider 클래스가 사용됩니다.
TripleDESCryptoServiceProvider를 얻는 방법은 다음과 같습니다.
///
> 🎜> {
TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider(); 🎜> 제공자.IV = Convert.FromBase64String(IV);
제공자.Key = Convert.FromBase64String(Key); 🎜>CreateEncryptor:대칭 암호화기 개체를 생성합니다.
CreateDecryptor: 대칭형 암호 해독기 개체 생성 ICryptoTransform
암호화기 개체 및 암호 해독기 개체는 CryptoStream 개체에서 사용할 수 있습니다. 스트림을 암호화하고 해독합니다.
cryptStream의 생성자는 다음과 같습니다.
public CryptoStream(Stream stream, ICryptoTransformTransform, CryptoStreamMode mode)
Transform 개체를 사용하여 스트림을 변환합니다.
완전한 암호화된 문자열 코드는 다음과 같습니다.
///
/// 암호화된 문자열 가져오기
/// < summary>
; /// 입력값.
///
{ MemoryStream mStream = new MemoryStream() ;
// 암호화된 변환 스트림 생성
CryptoStream cStream = new CryptoStream(mStream,
공급자.CreateEncryptor( ), CryptoStreamMode.Write);
// UTF8 인코딩을 사용하여 입력 문자열의 바이트를 얻습니다.
byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);
// 변환 스트림에 바이트를 씁니다.
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
// 변환 스트림의 FlushFinalBlock 메서드를 호출한 후 내부적으로 변환이 수행됩니다. 이때 mStream은 암호화된 스트림입니다.
byte[] ret = mStream.ToArray();
// 스트림을 닫습니다.
cStream.Close()
mStream.Close(); //암호화된 바이트를 64비트 인코딩으로 인코딩합니다.
return Convert.ToBase64String(ret) > /// 해독된 값 가져오기 > ///
{
TripleDESCryptoServiceProvider 공급자 = this.GetCryptoProvider();
byte[] inputEquivalent = Convert.FromBase64String(inputValue);
~
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
공급자.CreateDecryptor(),
CryptoStreamMode.Write)
csDecrypt.Write(inputEquivalent, 0, inputEquivalent.Length);
csDecrypt.FlushFinalBlock(); //获取字符串。
return new UTF8Encoding().GetString(msDecrypt.ToArray());
}
完整的CryptoHelper代码如下:
시스템 사용;
System.Collections.Generic 사용;
System.Linq 사용;
System.Text 사용;
System.Security.Cryptography 사용;
System.IO 사용;
System.Configuration 사용;
네임스페이스 WindowsFormsApplication1
{
공개 클래스 CryptoHelper
{
//개인 읽기 전용 문자열 IV = "SuFjcEmp/TE=";
비공개 읽기 전용 문자열 IV = string.Empty;
//비공개 읽기 전용 문자열 Key = "KIPSToILGp6fl+3gXJvMsN4IajizYBBT";
비공개 읽기 전용 문자열 Key = string.Empty;
공개 CryptoHelper()
{
IV = ConfigurationManager.AppSettings["IV"];
키 = ConfigurationManager.AppSettings["Key"];
}
///
/// 获取加密后的字符串
///
/// 输入值.
/// <반품>반품>
공개 문자열 GetEncryptedValue(string inputValue)
{
TripleDESCryptoServiceProvider 공급자 = this.GetCryptoProvider();
// 创建内存流来保存加密后的流
MemoryStream mStream = new MemoryStream();
// 创建加密转换流
CryptoStream cStream = new CryptoStream(mStream,
Provider.CreateEncryptor(), CryptoStreamMode.Write);
// 使useUTF8编码获取输入字符串的字节。
byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);
// 将字节写到转换流里面去。
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
// 在调用转换流的FlushFinalBlock방식后,内部就会进行转换了,此时mStream就是加密后流了。
[] ret = mStream.ToArray();
// 스트림을 닫습니다.
cStream.Close();
mStream.Close();
//将加密后的字节进行64编码。
return Convert.ToBase64String(ret);
}
///
/// 获取加密服务类
///
/// <반품>반품>
private TripleDESCryptoServiceProvider GetCryptoProvider()
{
TripleDESCryptoServiceProvider 공급자 = new TripleDESCryptoServiceProvider();
Provider.IV = Convert.FromBase64String(IV);
Provider.Key = Convert.FromBase64String(Key);
반품업체;
}
///
/// 获取解密后的值
///
/// 经过加密后的字符串.
/// <반품>반품>
공개 문자열 GetDecryptedValue(string inputValue)
{
TripleDESCryptoServiceProvider 공급자 = this.GetCryptoProvider();
byte[] inputEquivalent = Convert.FromBase64String(inputValue);
// 创建内存流保存解密后的数据
MemoryStream msDecrypt = new MemoryStream();
// 创建转换流。 );
csDecrypt.Write(inputEquivalent, 0, inputEquivalent.Length);
csDecrypt.FlushFinalBlock();
csDecrypt.Close();
//获取字符串。
return new UTF8Encoding().GetString(msDecrypt.ToArray());
}
}
}