`
zu14
  • 浏览: 459951 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

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

分享到:
评论

相关推荐

    基于C#的文件加密解密类库(附源码)

    本文将深入探讨一个基于C#的文件加密解密类库,该库专为Windows系统设计,旨在为文件提供安全的加密和解密服务。源码的提供不仅方便了开发者直接使用,也为学习和理解加密算法提供了宝贵的资源。 C#是一种面向对象...

    C#加密解密DeEncryptHelper.zip

    加密字符串 加密字符串 密钥为系统默认 加密文件 解密字符串 解密文件 128位MD5算法加密字符串 128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密类。 加密 加密数据 解密 解密数据 得到...

    C# DES加密/解密类成熟的加密解密类,适合项目开发,可以对于明文进行

    DES加密/解密类成熟的加密解密类,适合项目开发,可以对于明文进行加密

    C# 用DES 加密和解密字符串

    本文将深入探讨如何使用C#进行DES加密和解密字符串,以及相关的重要知识点。 首先,DES是一种块加密算法,它以64位的数据块进行操作,其中实际有效密钥长度为56位。在C#中,可以使用`System.Security.Cryptography`...

    C# Base64加密解密

    在C# WinForm项目中,Base64加密和解密是处理数据安全和传输的重要部分。 Base64编码原理: Base64编码是将每3个8位字节(24位)的数据转换成4个6位字节(24位)的数据,并用64个字符集中的字符来表示这4个6位字节...

    字符串、文件的DES加密和解密

    在IT领域,安全是至关重要的,特别是在数据存储和...综上所述,C#中的DES加密和解密提供了对字符串和文件的安全保护。通过理解并熟练运用这些技术,开发者可以在项目中确保数据的安全性,防止未经授权的访问和篡改。

    C#des对文件进行加密解密

    本篇文章将深入探讨如何使用C#语言实现DES对文件的加密和解密操作。 首先,了解DES算法的基础知识。DES是一种块加密算法,每个数据块大小为64位,实际用于加密的有效数据为56位,因为8位用于奇偶校验。它采用了一种...

    QT C++ AES字符串加密解密类库,引入即可使用

    QT C++ AES字符串加密解密类库是一种在C++编程环境中使用QT框架实现的高级加密标准(AES)加密和解密工具。QT是一个流行的开源跨平台应用开发框架,广泛应用于桌面、移动和嵌入式系统。AES是目前广泛应用的对称加密...

    1C#使用DES算法加密字符串为定长字符串的方法及代码实现[整理].pdf

    文档中所提到的代码通过.NET框架的System.Security.Cryptography命名空间下的类库来实现DES加密和解密操作,并且确保了加密后的字符串为定长输出,这通常是通过Base64编码来达成的。本文档还涉及到了异常处理和界面...

    C# DES加密解密

    在.NET框架中,C#语言提供了丰富的加密和解密功能,其中包括DES(Data Encryption Standard)算法。DES是一种对称加密算法,它使用相同的密钥进行数据的加密和解密。本篇文章将深入探讨C#中如何实现DES加密解密,并...

    c#版字符串DES加密解密工具源码

    总的来说,这个C#版的字符串DES加密解密工具源码是一个很好的学习资源,可以帮助开发者深入理解加密和解密的原理,以及如何在实际项目中应用这些技术。在实际开发中,结合最新的加密标准和最佳实践,可以确保数据的...

    c#中 base64字符串与普通字符串互转

    在C#编程语言中,Base64是一种用于将二进制数据编码为ASCII字符串的机制,以便在不支持二进制传输的系统(如电子邮件)中传输。Base64编码可以将任何二进制数据转换为可打印的字符,包括图片、文件和其他非文本数据...

    C#DES标准ECB加密解密示例源码

    根据标准的C改的源码,与网上所搜索到的完全不一样,可以支持中文为密钥的加密,也可以支持为中文字符串的加密,如,密钥为:替天行道,明文为:来自替天行道的C#DES标准ECB加密解密示例源码,加密后为:16505C9E77...

    C#各种加密方式的 加密、解密 小工具,可以直接运行的源码 含类库文件

    本项目包含了一个C#实现的各种加密方式的小工具,包含了可以直接运行的源代码以及类库文件,用户不仅可以编译这些源代码,还可以直接运行它们,从而在实际项目中应用这些加密和解密技术。 首先,我们要理解加密和...

    C#移位加密/解密器

    5. 编码与解码:在加密和解密完成后,需要将整型值再转换回字符,这可以通过反向转换完成,例如从ASCII或Unicode值恢复到字符。 C#代码示例: ```csharp public string ShiftEncrypt(string plaintext, int key) { ...

    C#加密解密(自定义加密字符)

    带加密字符的 加密 解密方法 static string encryptKey = "加密字符"; 自定义加密字符(加密解密必须一致才能解密) ///   /// 加密字符串 /// &lt;/summary&gt;  ///  name="str"&gt;要加密的字符串&lt;/param&gt; ...

    C#/JS AES字符串加密和解密

    本主题聚焦于"C#/JS AES字符串加密和解密",这是一种常用的方法,用于在前端JavaScript和后端C#之间安全地传输数据。 AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,因其...

    DES.zip_C#加密解密_DES字符串_Des 加密 解密_des_加密解密

    DES加密解密算法。通过密钥对对字符串进行加密解密操作,64位加密

    C#RSA加密/解密

    在这种情况下,可以通过XML字符串或Base64编码将密钥和加密后的数据传输。例如,你可以将公钥XML字符串发送给另一方,接收方解析这个字符串并使用它来加密数据,然后将加密后的数据发送回来,你再用私钥解密。 总结...

    C#base64加密解密工具(有源码)

    3. **支持中文与全角字符**: 在Base64编码中,所有字符都视为字节进行处理,因此它理论上能处理任何二进制数据,包括中文和全角字符。然而,Base64编码本身并不关心编码格式,因此在编码前应确保数据已正确地按照...

Global site tag (gtag.js) - Google Analytics