Asp.net,C#加密解密字符串的使用详解
首先在web.config|app.config文件下增加如下代码:
<?xmlversion="1.0"?>
<configuration>
<appSettings>
<addkey="IV"value="SuFjcEmp/TE="/>
<addkey="Key"value="KIPSToILGp6fl+3gXJvMsN4IajizYBBT"/>
</appSettings>
</configuration>
IV:加密算法的初始向量。
Key:加密算法的密钥。
接着新建类
首先要从配置文件中得到IV和Key。所以基本代码如下
publicclassCryptoHelper
{
//privatereadonlystringIV="SuFjcEmp/TE=";
privatereadonlystringIV=string.Empty;
//privatereadonlystringKey="KIPSToILGp6fl+3gXJvMsN4IajizYBBT";
privatereadonlystringKey=string.Empty;
///<summary>
///构造函数
///</summary>
publicCryptoHelper()
{
IV=ConfigurationManager.AppSettings["IV"];
Key=ConfigurationManager.AppSettings["Key"];
}
}
注意添加
在获得了IV和Key之后,需要获取提供加密服务的Service类。
在这里,使用的是System.Security.Cryptography;命名空间下的TripleDESCryptoServiceProvider类。
获取TripleDESCryptoServiceProvider的方法如下:
///<summary>
///获取加密服务类
///</summary>
///<returns></returns>
privateTripleDESCryptoServiceProviderGetCryptoProvider()
{
TripleDESCryptoServiceProviderprovider=newTripleDESCryptoServiceProvider();
provider.IV=Convert.FromBase64String(IV);
provider.Key=Convert.FromBase64String(Key);
returnprovider;
}
TripleDESCryptoServiceProvider两个有用的方法
加密器对象和解密器对象可以被CryptoStream对象使用。来对流进行加密和解密。
cryptoStream的构造函数如下:
publicCryptoStream(Streamstream,ICryptoTransformtransform,CryptoStreamModemode);
使用transform对象对stream进行转换。
完整的加密字符串代码如下:
///<summary>
///获取加密后的字符串
///</summary>
///<paramname="inputValue">输入值.</param>
///<returns></returns>
publicstringGetEncryptedValue(stringinputValue)
{
TripleDESCryptoServiceProviderprovider=this.GetCryptoProvider();
//创建内存流来保存加密后的流
MemoryStreammStream=newMemoryStream();
//创建加密转换流
CryptoStreamcStream=newCryptoStream(mStream,
provider.CreateEncryptor(),CryptoStreamMode.Write);
//使用UTF8编码获取输入字符串的字节。
byte[]toEncrypt=newUTF8Encoding().GetBytes(inputValue);
//将字节写到转换流里面去。
cStream.Write(toEncrypt,0,toEncrypt.Length);
cStream.FlushFinalBlock();
//在调用转换流的FlushFinalBlock方法后,内部就会进行转换了,此时mStream就是加密后的流了。
byte[]ret=mStream.ToArray();
//Closethestreams.
cStream.Close();
mStream.Close();
//将加密后的字节进行64编码。
returnConvert.ToBase64String(ret);
}
解密方法也类似:
///<summary>
///获取解密后的值
///</summary>
///<paramname="inputValue">经过加密后的字符串.</param>
///<returns></returns>
publicstringGetDecryptedValue(stringinputValue)
{
TripleDESCryptoServiceProviderprovider=this.GetCryptoProvider();
byte[]inputEquivalent=Convert.FromBase64String(inputValue);
//创建内存流保存解密后的数据
MemoryStreammsDecrypt=newMemoryStream();
//创建转换流。
CryptoStreamcsDecrypt=newCryptoStream(msDecrypt,
provider.CreateDecryptor(),
CryptoStreamMode.Write);
csDecrypt.Write(inputEquivalent,0,inputEquivalent.Length);
csDecrypt.FlushFinalBlock();
csDecrypt.Close();
//获取字符串。
returnnewUTF8Encoding().GetString(msDecrypt.ToArray());
}
完整的CryptoHelper代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Security.Cryptography;
usingSystem.IO;
usingSystem.Configuration;
namespaceWindowsFormsApplication1
{
publicclassCryptoHelper
{
//privatereadonlystringIV="SuFjcEmp/TE=";
privatereadonlystringIV=string.Empty;
//privatereadonlystringKey="KIPSToILGp6fl+3gXJvMsN4IajizYBBT";
privatereadonlystringKey=string.Empty;
publicCryptoHelper()
{
IV=ConfigurationManager.AppSettings["IV"];
Key=ConfigurationManager.AppSettings["Key"];
}
///<summary>
///获取加密后的字符串
///</summary>
///<paramname="inputValue">输入值.</param>
///<returns></returns>
publicstringGetEncryptedValue(stringinputValue)
{
TripleDESCryptoServiceProviderprovider=this.GetCryptoProvider();
//创建内存流来保存加密后的流
MemoryStreammStream=newMemoryStream();
//创建加密转换流
CryptoStreamcStream=newCryptoStream(mStream,
provider.CreateEncryptor(),CryptoStreamMode.Write);
//使用UTF8编码获取输入字符串的字节。
byte[]toEncrypt=newUTF8Encoding().GetBytes(inputValue);
//将字节写到转换流里面去。
cStream.Write(toEncrypt,0,toEncrypt.Length);
cStream.FlushFinalBlock();
//在调用转换流的FlushFinalBlock方法后,内部就会进行转换了,此时mStream就是加密后的流了。
byte[]ret=mStream.ToArray();
//Closethestreams.
cStream.Close();
mStream.Close();
//将加密后的字节进行64编码。
returnConvert.ToBase64String(ret);
}
///<summary>
///获取加密服务类
///</summary>
///<returns></returns>
privateTripleDESCryptoServiceProviderGetCryptoProvider()
{
TripleDESCryptoServiceProviderprovider=newTripleDESCryptoServiceProvider();
provider.IV=Convert.FromBase64String(IV);
provider.Key=Convert.FromBase64String(Key);
returnprovider;
}
///<summary>
///获取解密后的值
///</summary>
///<paramname="inputValue">经过加密后的字符串.</param>
///<returns></returns>
publicstringGetDecryptedValue(stringinputValue)
{
TripleDESCryptoServiceProviderprovider=this.GetCryptoProvider();
byte[]inputEquivalent=Convert.FromBase64String(inputValue);
//创建内存流保存解密后的数据
MemoryStreammsDecrypt=newMemoryStream();
//创建转换流。
CryptoStreamcsDecrypt=newCryptoStream(msDecrypt,
provider.CreateDecryptor(),
CryptoStreamMode.Write);
csDecrypt.Write(inputEquivalent,0,inputEquivalent.Length);
csDecrypt.FlushFinalBlock();
csDecrypt.Close();
//获取字符串。
returnnewUTF8Encoding().GetString(msDecrypt.ToArray());
}
}
}
使用例子:
相关文章
- [.NET控件]Telerik RadControls for ASP.NET AJAX 2008 Q1 net 2.0 Web.UI「建议收藏」
- C#/.NET CLI:公共语言基础设施
- .net让Oracle与ASP.NET实现无缝连接(oracleasp)
- NET与Oracle结合出现新的可能(.net oracle)
- 面向企业的Net框架开发与Oracle集成(net框架oracle)
- 数据使用NET改变Oracle数据库的奥秘(net修改oracle)
- NET和MySQL的无缝搭配实现创新的技术路径(.net mysql支持)
- C#.Net学习笔记(一)
- asp.net(C#)中上传大文件的几中常见应用方法
- asp.net(c#)获取内容第一张图片地址的函数
- asp.net(c#)使用Rex正则来生成字符串数组的代码
- asp.net(c#)下各种进制间的轻松转换(2进制、8进制、10进制、16进制)
- asp.net(c#)下读取word文档的方法小结
- asp.netc#抓取页面信息方法介绍
- 基于ASP.NET的lucene.net全文搜索实现步骤
- .Net中导出数据到Excel(asp.net和winform程序中)
- ASP.NET(C#)读取Excel的文件内容
- .netc#gif动画如何添加图片水印实现思路及代码
- 关于.NET/C#/WCF/WPF打造IP网络智能视频监控系统的介绍
- SQLServer中调用C#类中的方法实例(使用.NET程序集)
- asp.net中C#实现手动回收内存的方法