zoukankan      html  css  js  c++  java
  • C# DES 加密/解密

    代码
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Security;
    using System.Security.Cryptography;
    /*----------------------------------------------
    * DES加密、解密类库,字符串加密结果使用BASE64编码返回,支持文件的加密和解密
    * 作者: Leo.wl
    * ---------------------------------------------
    */
    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);



  • 相关阅读:
    Linux 修改最大线程数
    Openresty+Nginx+Lua+Nginx_http_upstream_check_module 搭建
    SSDB 性能测试
    面向对象:类的成员
    封装,多态,类的约束,super()深入了解
    面向对象:继承
    面向对象:类的空间问题,类之间关系
    面向对象初识
    软件开发规范
    模块(四)包和logging日志
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1721556.html
Copyright © 2011-2022 走看看