zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Asp.net,C#加密解密字符串的使用详解

c#NetASP加密解密 使用 详解 字符串
2023-06-13 09:14:53 时间

首先在web.config|app.config文件下增加如下代码:

复制代码代码如下:

<?xmlversion="1.0"?>
 <configuration>
   <appSettings>
     <addkey="IV"value="SuFjcEmp/TE="/>
     <addkey="Key"value="KIPSToILGp6fl+3gXJvMsN4IajizYBBT"/>
   </appSettings>
 </configuration>

IV:加密算法的初始向量。

Key:加密算法的密钥。

接着新建类CryptoHelper,作为加密帮助类。

首先要从配置文件中得到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"];
           }
       }


注意添加System.Configuration.dll程序集引用。
在获得了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两个有用的方法

CreateEncryptor:创建对称加密器对象ICryptoTransform.

CreateDecryptor:创建对称解密器对象ICryptoTransform

加密器对象和解密器对象可以被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());
       }
   }
}


使用例子: