zoukankan      html  css  js  c++  java
  • 【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);
                    }
                    
    
            }
    }
    
  • 相关阅读:
    懒人模式Singleton模式Meyers版本号
    欢迎CSDN-markdown编辑
    协同编辑多人word一个小技巧文件
    72_leetcode_Construct Binary Tree from Preorder and Inorder Traversal
    2015第44周五Java集群技术(转)
    linux远程管理工具
    2015第44周三提升个人价值意识
    2015第44周二
    2015第44周一
    2015第43周日
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1721586.html
Copyright © 2011-2022 走看看