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

    今天,看到网友咨询DES加密的事,就写了下面的类库,sharing 一下,欢迎多交流

    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了。

  • 相关阅读:
    二项式反演
    快速沃尔什变换
    springMVC的form标签
    springMVC的拦截器配置
    RESTful使用方法
    springMVC数据绑定
    使用spring框架自带的字符拦截器
    将idea中的项目上传至github
    springMVC的使用方式
    springMVC的概述
  • 原文地址:https://www.cnblogs.com/huangcong/p/1697230.html
Copyright © 2011-2022 走看看