程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP基礎知識 >> Asp.net,C# 加密解密字符串 介紹

Asp.net,C# 加密解密字符串 介紹

編輯:ASP基礎知識

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

  }

  }

  }

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved