DES全称为Data Encryption
Standard,即数据加密标准。1997年数据加密标准DES正式公布,其分组长度为64比特,密钥长度为64比特,其中8比特为奇偶校验位,所以实际长度为56比特。现在DES已经被AES所取代。
DES原理和具体计算过程示例可以参考:DES加密教程详细解读
<https://blog.csdn.net/baidu_36856113/article/details/53558795>
C#可以使用自带的类库简单的完成DES加密,主要用到以下三个类:
MemoryStream 内存流
DESCryptoServiceProvider 加密服务提供者类
CryptoStream 将数据流连接到加密转换的流
由于是对称加密,加密和解密钥匙需要一致
以下代码主要参考了用C#实现DES加密解密封装 <https://www.cnblogs.com/gyc19920704/p/6510611.html>
,做了一点微小改动,然后加了点注释
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()); } } }
热门工具 换一换