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>

            ///构造函数

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

        }

    }

}

 

使用例子:

image

 

原文地址:http://blogs.msdn.com/b/nikhiln/archive/2008/05/18/net-2-0-symmetric-encryption-code-sample.aspx

你可能感兴趣的:(asp.net)