Asp.net,C# 加密解密字符串的使用詳解
首先在web.config | app.config 文件下增加如下代碼:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="IV" value="SuFjcEmp/TE="/>
<add key="Key" value="KIPSToILGp6fl+3gXJvMsN4IajizYBBT"/>
</appSettings>
</configuration>
IV:加密算法的初始向量。
Key:加密算法的密鑰。
接著新建類CryptoHelper,作為加密幫助類。
首先要從配置文件中得到IV 和Key。所以基本代碼如下
public class CryptoHelper
{
//private readonly string IV = "SuFjcEmp/TE=";
private readonly string IV = string.Empty;
//private readonly string Key = "KIPSToILGp6fl+3gXJvMsN4IajizYBBT";
private readonly string Key = string.Empty;
/// <summary>
///構(gòu)造函數(shù)
/// </summary>
public CryptoHelper()
{
IV = ConfigurationManager.AppSettings["IV"];
Key = ConfigurationManager.AppSettings["Key"];
}
}
注意添加System.Configuration.dll程序集引用。
在獲得了IV 和Key 之后,需要獲取提供加密服務(wù)的Service 類。
在這里,使用的是System.Security.Cryptography; 命名空間下的TripleDESCryptoServiceProvider類。
獲取TripleDESCryptoServiceProvider 的方法如下:
/// <summary>
/// 獲取加密服務(wù)類
/// </summary>
/// <returns></returns>
private TripleDESCryptoServiceProvider GetCryptoProvider()
{
TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();
provider.IV = Convert.FromBase64String(IV);
provider.Key = Convert.FromBase64String(Key);
return provider;
}
TripleDESCryptoServiceProvider 兩個有用的方法
CreateEncryptor:創(chuàng)建對稱加密器對象ICryptoTransform.
CreateDecryptor:創(chuàng)建對稱解密器對象ICryptoTransform
加密器對象和解密器對象可以被CryptoStream對象使用。來對流進行加密和解密。
cryptoStream 的構(gòu)造函數(shù)如下:
public CryptoStream(Stream stream, ICryptoTransform transform, CryptoStreamMode mode);
使用transform 對象對stream 進行轉(zhuǎn)換。
完整的加密字符串代碼如下:
/// <summary>
/// 獲取加密后的字符串
/// </summary>
/// <param name="inputValue">輸入值.</param>
/// <returns></returns>
public string GetEncryptedValue(string inputValue)
{
TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();
// 創(chuàng)建內(nèi)存流來保存加密后的流
MemoryStream mStream = new MemoryStream();
// 創(chuàng)建加密轉(zhuǎn)換流
CryptoStream cStream = new CryptoStream(mStream,
provider.CreateEncryptor(), CryptoStreamMode.Write);
// 使用UTF8編碼獲取輸入字符串的字節(jié)。
byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);
// 將字節(jié)寫到轉(zhuǎn)換流里面去。
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
// 在調(diào)用轉(zhuǎn)換流的FlushFinalBlock方法后,內(nèi)部就會進行轉(zhuǎn)換了,此時mStream就是加密后的流了。
byte[] ret = mStream.ToArray();
// Close the streams.
cStream.Close();
mStream.Close();
//將加密后的字節(jié)進行64編碼。
return Convert.ToBase64String(ret);
}
解密方法也類似:
/// <summary>
/// 獲取解密后的值
/// </summary>
/// <param name="inputValue">經(jīng)過加密后的字符串.</param>
/// <returns></returns>
public string GetDecryptedValue(string inputValue)
{
TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();
byte[] inputEquivalent = Convert.FromBase64String(inputValue);
// 創(chuàng)建內(nèi)存流保存解密后的數(shù)據(jù)
MemoryStream msDecrypt = new MemoryStream();
// 創(chuàng)建轉(zhuǎn)換流。
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
provider.CreateDecryptor(),
CryptoStreamMode.Write);
csDecrypt.Write(inputEquivalent, 0, inputEquivalent.Length);
csDecrypt.FlushFinalBlock();
csDecrypt.Close();
//獲取字符串。
return new UTF8Encoding().GetString(msDecrypt.ToArray());
}
完整的CryptoHelper代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Configuration;
namespace WindowsFormsApplication1
{
public class CryptoHelper
{
//private readonly string IV = "SuFjcEmp/TE=";
private readonly string IV = string.Empty;
//private readonly string Key = "KIPSToILGp6fl+3gXJvMsN4IajizYBBT";
private readonly string Key = string.Empty;
public CryptoHelper()
{
IV = ConfigurationManager.AppSettings["IV"];
Key = ConfigurationManager.AppSettings["Key"];
}
/// <summary>
/// 獲取加密后的字符串
/// </summary>
/// <param name="inputValue">輸入值.</param>
/// <returns></returns>
public string GetEncryptedValue(string inputValue)
{
TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();
// 創(chuàng)建內(nèi)存流來保存加密后的流
MemoryStream mStream = new MemoryStream();
// 創(chuàng)建加密轉(zhuǎn)換流
CryptoStream cStream = new CryptoStream(mStream,
provider.CreateEncryptor(), CryptoStreamMode.Write);
// 使用UTF8編碼獲取輸入字符串的字節(jié)。
byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);
// 將字節(jié)寫到轉(zhuǎn)換流里面去。
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
// 在調(diào)用轉(zhuǎn)換流的FlushFinalBlock方法后,內(nèi)部就會進行轉(zhuǎn)換了,此時mStream就是加密后的流了。
byte[] ret = mStream.ToArray();
// Close the streams.
cStream.Close();
mStream.Close();
//將加密后的字節(jié)進行64編碼。
return Convert.ToBase64String(ret);
}
/// <summary>
/// 獲取加密服務(wù)類
/// </summary>
/// <returns></returns>
private TripleDESCryptoServiceProvider GetCryptoProvider()
{
TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();
provider.IV = Convert.FromBase64String(IV);
provider.Key = Convert.FromBase64String(Key);
return provider;
}
/// <summary>
/// 獲取解密后的值
/// </summary>
/// <param name="inputValue">經(jīng)過加密后的字符串.</param>
/// <returns></returns>
public string GetDecryptedValue(string inputValue)
{
TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();
byte[] inputEquivalent = Convert.FromBase64String(inputValue);
// 創(chuàng)建內(nèi)存流保存解密后的數(shù)據(jù)
MemoryStream msDecrypt = new MemoryStream();
// 創(chuàng)建轉(zhuǎn)換流。
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
provider.CreateDecryptor(),
CryptoStreamMode.Write);
csDecrypt.Write(inputEquivalent, 0, inputEquivalent.Length);
csDecrypt.FlushFinalBlock();
csDecrypt.Close();
//獲取字符串。
return new UTF8Encoding().GetString(msDecrypt.ToArray());
}
}
}
使用例子:
相關(guān)文章
.Net中Task Parallel Library的進階用法
這篇文章介紹了.Net中Task Parallel Library的進階用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10.NET?6開發(fā)TodoList應(yīng)用之使用MediatR實現(xiàn)POST請求
對于稍微正式的項目,.NET工程上習(xí)慣的實現(xiàn)是通過使用比較成熟的類庫框架,有效地對業(yè)務(wù)邏輯進行分類管理、消除冗余代碼,以達到業(yè)務(wù)邏輯職責(zé)清晰簡潔的目的。在這個階段我們經(jīng)常使用的兩個類庫分別是AutoMapper和MediatR。本文將為大家介紹MediatR如何實現(xiàn)POST請求2021-12-12ASP.Net Core(C#)創(chuàng)建Web站點的實現(xiàn)
本文主要介紹了ASP.Net Core(C#)創(chuàng)建Web站點的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07ASP.NET中GridView和Repeater重復(fù)數(shù)據(jù)如何合并
這篇文章主要介紹了ASP.NET中GridView和Repeater重復(fù)數(shù)據(jù)合并的方法,感興趣的小伙伴們可以參考一下2016-08-08在?.NET?平臺使用?ReflectionDynamicObject?優(yōu)化反射調(diào)用的代碼詳解
這篇文章主要介紹了在?.NET?平臺使用?ReflectionDynamicObject?優(yōu)化反射調(diào)用代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03使用DataTable.Select 方法時,特殊字符的轉(zhuǎn)義方法分享
常見的特殊字符 基本都能轉(zhuǎn)義 ,不知道還有沒有漏掉的 ,目前使用正常 ,有需要的朋友可以參考一下2013-10-10基于ASP.NET MVC的ABP框架入門學(xué)習(xí)教程
ABP是基于Windows系統(tǒng)上.NET Framework環(huán)境的Web開發(fā)框架,這里我們基于.NET的Visual Studio開發(fā)環(huán)境,來共同進入基于ASP.NET MVC的ABP框架入門學(xué)習(xí)教程2016-06-06