zoukankan      html  css  js  c++  java
  • [转]C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Security;
    using System.Security.Cryptography;
    
    /*----------------------------------------------
     *  DES加密、解密类库,字符串加密结果使用BASE64编码返回,支持文件的加密和解密
     *  作者: 三角猫/DeltaCat
     *  网址: http://www.zu14.cn
     *  转载务必保留此信息
     * ---------------------------------------------
     */
    
    namespace ZU14
    {
        public sealed class DES
        {
            string iv = "1234的yzo";
            string key = "123在yzo";
    
            /// <summary>
            /// DES加密偏移量,必须是>=8位长的字符串
            /// </summary>
            public string IV
            {
                get { return iv; }
                set { iv = value; }
            }
    
            /// <summary>
            /// DES加密的私钥,必须是8位长的字符串
            /// </summary>
            public string Key
            {
                get { return key; }
                set { key = value; }
            }
    
            /// <summary>
            /// 对字符串进行DES加密
            /// </summary>
            /// <param name="sourceString">待加密的字符串</param>
            /// <returns>加密后的BASE64编码的字符串</returns>
            public string Encrypt(string sourceString)
            {
                byte[] btKey = Encoding.Default.GetBytes(key);
                byte[] btIV = Encoding.Default.GetBytes(iv);
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                using (MemoryStream ms = new MemoryStream())
                {
                    byte[] inData = Encoding.Default.GetBytes(sourceString);
                    try
                    {
                        using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
                        {
                            cs.Write(inData, 0, inData.Length);
                            cs.FlushFinalBlock();
                        }
    
                        return Convert.ToBase64String(ms.ToArray());
                    }
                    catch
                    {
                        throw;
                    }
                }
            }
    
            /// <summary>
            /// 对DES加密后的字符串进行解密
            /// </summary>
            /// <param name="encryptedString">待解密的字符串</param>
            /// <returns>解密后的字符串</returns>
            public string Decrypt(string encryptedString)
            {
                byte[] btKey = Encoding.Default.GetBytes(key);
                byte[] btIV = Encoding.Default.GetBytes(iv);
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    
                using (MemoryStream ms = new MemoryStream())
                {
                    byte[] inData = Convert.FromBase64String(encryptedString);
                    try
                    {
                        using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
                        {
                            cs.Write(inData, 0, inData.Length);
                            cs.FlushFinalBlock();
                        }
    
                        return Encoding.Default.GetString(ms.ToArray());
                    }
                    catch
                    {
                        throw;
                    }
                }
            }
    
            /// <summary>
            /// 对文件内容进行DES加密
            /// </summary>
            /// <param name="sourceFile">待加密的文件绝对路径</param>
            /// <param name="destFile">加密后的文件保存的绝对路径</param>
            public void EncryptFile(string sourceFile, string destFile)
            {
                if (!File.Exists(sourceFile)) throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);
    
                byte[] btKey = Encoding.Default.GetBytes(key);
                byte[] btIV = Encoding.Default.GetBytes(iv);
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] btFile = File.ReadAllBytes(sourceFile);
    
                using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
                {
                    try
                    {
                        using (CryptoStream cs = new CryptoStream(fs, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
                        {
                            cs.Write(btFile, 0, btFile.Length);
                            cs.FlushFinalBlock();
                        }
                    }
                    catch
                    {
                        throw;
                    }
                    finally
                    {
                        fs.Close();
                    }
                }
            }
    
            /// <summary>
            /// 对文件内容进行DES加密,加密后覆盖掉原来的文件
            /// </summary>
            /// <param name="sourceFile">待加密的文件的绝对路径</param>
            public void EncryptFile(string sourceFile)
            {
                EncryptFile(sourceFile, sourceFile);
            }
    
            /// <summary>
            /// 对文件内容进行DES解密
            /// </summary>
            /// <param name="sourceFile">待解密的文件绝对路径</param>
            /// <param name="destFile">解密后的文件保存的绝对路径</param>
            public void DecryptFile(string sourceFile, string destFile)
            {
                if (!File.Exists(sourceFile)) throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);
    
                byte[] btKey = Encoding.Default.GetBytes(key);
                byte[] btIV = Encoding.Default.GetBytes(iv);
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] btFile = File.ReadAllBytes(sourceFile);
    
                using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
                {
                    try
                    {
                        using (CryptoStream cs = new CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
                        {
                            cs.Write(btFile, 0, btFile.Length);
                            cs.FlushFinalBlock();
                        }
                    }
                    catch
                    {
                        throw;
                    }
                    finally
                    {
                        fs.Close();
                    }
                }
            }
    
            /// <summary>
            /// 对文件内容进行DES解密,加密后覆盖掉原来的文件
            /// </summary>
            /// <param name="sourceFile">待解密的文件的绝对路径</param>
            public void DecryptFile(string sourceFile)
            {
                DecryptFile(sourceFile, sourceFile);
            }
        }
    }

    使用的例子

    ZU14.DES des = new ZU14.DES();
    des.IV = "abcd哈哈笑";
    des.Key = "必须八位";
    
    string es = des.Encrypt("在");
    Console.WriteLine(es);
    Console.Write(des.Decrypt(es));
    
    des.EncryptFile(@"d:\a.txt", @"d:\b.txt");
    des.DecryptFile(@"d:\b.txt");
    
    Console.ReadKey(true);
     

    OK了。

  • 相关阅读:
    href="#" 是什么意思?
    JavaScript匿名自执行函数~function(){}
    var $this = $(this)是什么意思?
    .Ajax
    myeclipse 的Customize Perspective 没有反应
    JS中的this指向问题
    JS中$含义和用法
    JS中sessionstorage的getItem/setItem/removeItem/clear
    JS中的top是什么?
    CAD常用命令大全
  • 原文地址:https://www.cnblogs.com/mimi001/p/1671350.html
Copyright © 2011-2022 走看看