DES全稱爲Data Encryption Standard,即數據加密標準。1997年數據加密標準DES正式公佈,其分組長度爲64比特,密鑰長度爲64比特,其中8比特爲奇偶校驗位,所以實際長度爲56比特。現在DES已經被AES所取代。
DES原理和具體計算過程示例可以參考:DES加密教程詳細解讀
C#可以使用自帶的類庫簡單的完成DES加密,主要用到以下三個類:
MemoryStream 內存流
DESCryptoServiceProvider 加密服務提供者類
CryptoStream 將數據流連接到加密轉換的流
由於是對稱加密,加密和解密鑰匙需要一致
以下代碼主要參考了用C#實現DES加密解密封裝,做了一點微小改動,然後加了點註釋
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
namespace Common
{
/// <summary>
/// DESEncrypt加密解密算法。
/// </summary>
public class DESEncrypt
{
public DESEncrypt()
{
}
/// <summary>
/// DES加密
/// </summary>
/// <param name="str">需要加密的</param>
/// <param name="sKey">密匙</param>
/// <returns></returns>
private string Encrypt(string str, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(str);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);// 密匙
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);// 初始化向量
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
var retB = Convert.ToBase64String(ms.ToArray());
return retB;
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="pToDecrypt">需要解密的</param>
/// <param name="sKey">密匙</param>
/// <returns></returns>
private string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
// 如果兩次密匙不一樣,這一步可能會引發異常
cs.FlushFinalBlock();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
}
}