Fork me on GitHub
【C#源码】DES加密解密类
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;
using System.Collections;

namespace Deking
{
        class DesEncryption
        {
//默认密钥向量
                private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
                /// <summary>
                /// DES加密字符串
                /// </summary>
                /// <param name="encryptString">待加密的字符串</param>
                /// <param name="encryptKey">加密密钥,要求为8位</param>
                /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
                public static string EncryptDES(string encryptString, string encryptKey)
                {
                        try
                        {
                                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
                                byte[] rgbIV = Keys;
                                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                                DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
                                MemoryStream mStream = new MemoryStream();
                                CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                                cStream.FlushFinalBlock();
                                return Convert.ToBase64String(mStream.ToArray());
                        }
                        catch
                        {
                                return encryptString;
                        }
                }

                /// <summary>
                /// DES解密字符串
                /// </summary>
                /// <param name="decryptString">待解密的字符串</param>
                /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
                /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
                public static string DecryptDES(string decryptString, string decryptKey)
                {
                        try
                        {
                                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
                                byte[] rgbIV = Keys;
                                byte[] inputByteArray = Convert.FromBase64String(decryptString);
                                DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
                                MemoryStream mStream = new MemoryStream();
                                CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                                cStream.FlushFinalBlock();
                                return Encoding.UTF8.GetString(mStream.ToArray());
                        }
                        catch
                        {
                                return decryptString;
                        }
                }
        }
                public void DesEncrypt(string sInputFilename, string sOutputFilename, string key) //加密解密类
                {
                        string sKey;
                        FileStream fsInput = new FileStream(sInputFilename,
                        FileMode.Open,
                        FileAccess.Read);

                        FileStream fsEncrypted = new FileStream(sOutputFilename,
                           FileMode.Create,
                           FileAccess.Write);
                        DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                        if (key.Length >= 8)
                                sKey = key.Substring(0, 8);
                        else
                        {
                                sKey = key.PadRight(8, '1');
                        }
                        DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                        DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                        ICryptoTransform desencrypt = DES.CreateEncryptor();
                        CryptoStream cryptostream = new CryptoStream(fsEncrypted,
                           desencrypt,
                           CryptoStreamMode.Write);
                        byte[] bytearrayinput = new byte[fsInput.Length];
                        fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
                        cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
                        cryptostream.Close();
                        fsInput.Close();
                        fsEncrypted.Close();
                        System.IO.File.Delete(sInputFilename);

                }
                public void DesDecrypt(string sInputFilename,
                            string sOutputFilename,
                            string key)
                {
                        string sKey;
                        DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                        //
                        // 转换key为8位
                        //

                        if (key.Length >= 8)
                                sKey = key.Substring(0, 8);
                        else
                        {
                                sKey = key.PadRight(8, '1');
                        }
                        DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                        //Set initialization vector.
                        DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                        FileStream fsread = new FileStream(sInputFilename,
                                                       FileMode.Open,
                                                       FileAccess.Read);
                        FileStream fswrite = new FileStream(sOutputFilename,
                                                       FileMode.Create,
                                                       FileAccess.Write);
                        ICryptoTransform desdecrypt = DES.CreateDecryptor();
                        CryptoStream cryptostreamDecr = new CryptoStream(fswrite,
                                                                     desdecrypt,
                                                                     CryptoStreamMode.Write);
                        byte[] bytearrayinput = new byte[fsread.Length];
                        fsread.Read(bytearrayinput, 0, bytearrayinput.Length);
                        cryptostreamDecr.Write(bytearrayinput, 0, bytearrayinput.Length);
                        cryptostreamDecr.Close();
                        fswrite.Close();
                        fsread.Close();
                        System.IO.File.Delete(sInputFilename);
                }
                

        }
}
posted on 2010-04-26 22:06  HackerVirus  阅读(491)  评论(0编辑  收藏  举报