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