手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >Asp.net,C# 加密解密字符串的使用详解
Asp.net,C# 加密解密字符串的使用详解
摘要:首先在web.config|app.config文件下增加如下代码:复制代码代码如下:IV:加密算法的初始向量。Key:加密算法的密钥。接着...

首先在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>

///构造函数

/// </summary>

public CryptoHelper()

{

IV = ConfigurationManager.AppSettings["IV"];

Key = ConfigurationManager.AppSettings["Key"];

}

}

注意添加System.Configuration.dll程序集引用。

在获得了IV 和Key 之后,需要获取提供加密服务的Service 类。

在这里,使用的是System.Security.Cryptography; 命名空间下的TripleDESCryptoServiceProvider类。

获取TripleDESCryptoServiceProvider 的方法如下:

复制代码 代码如下:

/// <summary>

/// 获取加密服务类

/// </summary>

/// <returns></returns>

private TripleDESCryptoServiceProvider GetCryptoProvider()

{

TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();

provider.IV = Convert.FromBase64String(IV);

provider.Key = Convert.FromBase64String(Key);

return provider;

}

TripleDESCryptoServiceProvider 两个有用的方法

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

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

加密器对象和解密器对象可以被CryptoStream对象使用。来对流进行加密和解密。

cryptoStream 的构造函数如下:

public CryptoStream(Stream stream, ICryptoTransform transform, CryptoStreamMode mode);

使用transform 对象对stream 进行转换。

完整的加密字符串代码如下:

复制代码 代码如下:

/// <summary>

/// 获取加密后的字符串

/// </summary>

/// <param name="inputValue">输入值.</param>

/// <returns></returns>

public string GetEncryptedValue(string inputValue)

{

TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();

// 创建内存流来保存加密后的流

MemoryStream mStream = new MemoryStream();

// 创建加密转换流

CryptoStream cStream = new CryptoStream(mStream,

provider.CreateEncryptor(), CryptoStreamMode.Write);

// 使用UTF8编码获取输入字符串的字节。

byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);

// 将字节写到转换流里面去。

cStream.Write(toEncrypt, 0, toEncrypt.Length);

cStream.FlushFinalBlock();

// 在调用转换流的FlushFinalBlock方法后,内部就会进行转换了,此时mStream就是加密后的流了。

byte[] ret = mStream.ToArray();

// Close the streams.

cStream.Close();

mStream.Close();

//将加密后的字节进行64编码。

return Convert.ToBase64String(ret);

}

解密方法也类似:

复制代码 代码如下:

/// <summary>

/// 获取解密后的值

/// </summary>

/// <param name="inputValue">经过加密后的字符串.</param>

/// <returns></returns>

public string GetDecryptedValue(string inputValue)

{

TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();

byte[] inputEquivalent = Convert.FromBase64String(inputValue);

// 创建内存流保存解密后的数据

MemoryStream msDecrypt = new MemoryStream();

// 创建转换流。

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();

// 创建内存流来保存加密后的流

MemoryStream mStream = new MemoryStream();

// 创建加密转换流

CryptoStream cStream = new CryptoStream(mStream,

provider.CreateEncryptor(), CryptoStreamMode.Write);

// 使用UTF8编码获取输入字符串的字节。

byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);

// 将字节写到转换流里面去。

cStream.Write(toEncrypt, 0, toEncrypt.Length);

cStream.FlushFinalBlock();

// 在调用转换流的FlushFinalBlock方法后,内部就会进行转换了,此时mStream就是加密后的流了。

byte[] ret = mStream.ToArray();

// Close the streams.

cStream.Close();

mStream.Close();

//将加密后的字节进行64编码。

return Convert.ToBase64String(ret);

}

/// <summary>

/// 获取加密服务类

/// </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">经过加密后的字符串.</param>

/// <returns></returns>

public string GetDecryptedValue(string inputValue)

{

TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();

byte[] inputEquivalent = Convert.FromBase64String(inputValue);

// 创建内存流保存解密后的数据

MemoryStream msDecrypt = new MemoryStream();

// 创建转换流。

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());

}

}

}

使用例子:

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

【Asp.net,C# 加密解密字符串的使用详解】相关文章:

Ajax+asp.net实现用户登陆

asp.net获取网站绝对路径案例详解

asp.net Split分割字符串的方法

asp.net 多字段模糊查询代码

asp.net(c#)利用构造器链的代码

asp.net 2.0多语言网站解决方法

asp.net字符串分割函数使用方法分享

asp.net HttpWebRequest自动识别网页编码

asp.net下利用JS实现对后台CS代码的调用方法

asp.net cookie清除的代码

精品推荐
分类导航