欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# 实现DES加密解密

程序员文章站 2022-05-15 14:59:44
...

DES算法是一种最通用的对称**算法,因为算法本身是公开的,所以其安全性在于**的安全性。基于**的算法通常有两类:对称算法和公开**算法。对称算法的对称性体现在加***能够从解***推算出来,反之亦然。在大多数对称算法中,加解密的**是相同的,DES就是这样。可见,对称**算法的加解***都是保密的。而公开**算法的加***是公开的,解***是保密的。

DES 加密算法的整体流程图如图1-6。

 

C# 实现DES加密解密

图1-6.DES加密流程图

因为在VS编译器中,WPF项目可以调用类库函数,所以实现des的加密解密较为简单。主要用到C#提供的以下三个类:
MemoryStream 内存流
DESCryptoServiceProvider 加密服务提供者类
CryptoStream 讲数据流连接到加密转换的流

具体函数如图1-7所示(加密函数传入参数是明文str和**sKey;解密函数传入参数是密文pToDecrypt和**sKey):

 class des
    {
       
        public static  string EncryptString(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;
        }

        //解密
        public static string DecryptString(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());
        }
      
    }