C# DES加密类,16位的加密。

8/3/2015来源:C#应用人气:1476

C# DES加密类,16位的加密。

这个加密类是与java写的DES加密不同时,自己写的,最后与Java的加密相同了,解决了加密后不同的问题。

可以直接调用里面的加密和解密的方法。

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;using System.Security.Cryptography;using System.IO;namespace EallNum.Helper{    public class FI_DesTools    {        PRivate FI_DesTools()         {        }          private static string key = "×××××";          /// <summary>         /// 对称加密解密的密钥         /// </summary>         public static string Key        {             get             {                 return key;            }             set             {                 key = value;            }         }          /// <summary>         /// DES加密         /// </summary>         /// <param name="encryptString"></param>         /// <returns></returns>         public static string DesEncrypt(string strEncryptString)         {            StringBuilder strRetValue = new StringBuilder();            try            {                byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));                 byte[] keyIV = keyBytes;                byte[] inputByteArray = Encoding.UTF8.GetBytes(strEncryptString);                 DESCryptoServiceProvider provider = new DESCryptoServiceProvider();                            provider.Mode = CipherMode.ECB;//兼容其他语言的Des加密算法                  provider.Padding = PaddingMode.Zeros;//自动补0                                          MemoryStream mStream = new MemoryStream();                 CryptoStream cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);                 cStream.Write(inputByteArray, 0, inputByteArray.Length);                 cStream.FlushFinalBlock();                 //不使用base64编码                //return Convert.ToBase64String(mStream.ToArray());                 //组织成16进制字符串                            foreach (byte b in mStream.ToArray())                {                    strRetValue.AppendFormat("{0:X2}", b);                }            }            catch (Exception e)            {                Console.WriteLine(e);            }            return strRetValue.ToString();        }          /// <summary>         /// DES解密         /// </summary>         /// <param name="decryptString"></param>         /// <returns></returns>                 public static string DesDecrypt(string strDecryptString)        {            string strRetValue = "";            try            {                   byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));                byte[] keyIV = keyBytes;                //不使用base64解码                //byte[] inputByteArray = Convert.FromBase64String(decryptString);                //16进制转换为byte字节                byte[] inputByteArray = new byte[strDecryptString.Length / 2];                for (int x = 0; x < strDecryptString.Length / 2; x++)                {                    int i = (Convert.ToInt32(strDecryptString.Substring(x * 2, 2), 16));                    inputByteArray[x] = (byte)i;                }                DESCryptoServiceProvider provider = new DESCryptoServiceProvider();                provider.Mode = CipherMode.ECB;//兼容其他语言的Des加密算法                  provider.Padding = PaddingMode.Zeros;//自动补0                  MemoryStream mStream = new MemoryStream();                CryptoStream cStream = new CryptoStream(mStream, provider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);                cStream.Write(inputByteArray, 0, inputByteArray.Length);                cStream.FlushFinalBlock();                //需要去掉结尾的null字符                //strRetValue = Encoding.UTF8.GetString(mStream.ToArray());                strRetValue = Encoding.UTF8.GetString(mStream.ToArray()).TrimEnd('\0');            }            catch (Exception e)            {                Console.WriteLine(e);            }                        return strRetValue;        }    }}