`
hipeace87
  • 浏览: 174417 次
  • 性别: Icon_minigender_1
  • 来自: 山东菏泽
社区版块
存档分类
最新评论

C#加密解密文件

阅读更多
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

namespace ConsoleApplication
{
    public class EncryptKit
    {
        /// <summary>
        /// Call this function to remove the key from memory after use for security
        /// </summary>
        /// <param name="Destination"></param>
        /// <param name="Length"></param>
        /// <returns></returns>
        [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]
        public static extern bool ZeroMemory(IntPtr Destination, int Length);
        /// <summary>
        /// Function to Generate a 64 bits Key.
        /// </summary>
        /// <returns>返回生成的密钥</returns>
        public static string GenerateKey()
        {
            // Create an instance of Symetric Algorithm. Key and IV is generated automatically.
            DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
            // Use the Automatically generated key for Encryption.
            return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
        }
        /// <summary>
        /// 加密文件
        /// </summary>
        /// <param name="sInputFilename">要加密的文件</param>
        /// <param name="sOutputFilename">加密后保存的文件</param>
        /// <param name="sKey">密钥</param>
        public static void EncryptFile(string sInputFilename, string sOutputFilename, string sKey)
        {
            using (FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read))
            {
                byte[] bytearrayinput = new byte[fsInput.Length];
                fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
                fsInput.Close();

                FileStream fsEncrypted = new FileStream(sOutputFilename,
                   FileMode.OpenOrCreate,
                   FileAccess.Write);
                DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

                ICryptoTransform desencrypt = DES.CreateEncryptor();
                CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);
                cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
                cryptostream.Close();
                fsEncrypted.Close();
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sInputFilename">要解密的文件</param>
        /// <param name="sOutputFilename">解决后保存的文件</param>
        /// <param name="sKey">密钥</param>
        public static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey)
        {
            DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
            //A 64 bit key and IV is required for this provider.
            //Set secret key For DES algorithm.
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            //Set initialization vector.
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

            //Create a file stream to read the encrypted file back.
            using (FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read))
            {
                //Create a DES decryptor from the DES instance.
                ICryptoTransform desdecrypt = DES.CreateDecryptor();
                //Create crypto stream set to read and do a
                //DES decryption transform on incoming bytes.
                CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);
                //Print the contents of the decrypted file.
                StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
                fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
                fsDecrypted.Flush();
                fsDecrypted.Close();
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sInputFilename">要解密的文件路径</param>
        /// <param name="sKey">密钥</param>
        /// <returns>返回内容</returns>
        public static string DecryptFile(string sInputFilename, string sKey)
        {
            DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
            //A 64 bit key and IV is required for this provider.
            //Set secret key For DES algorithm.
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            //Set initialization vector.
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

            //Create a file stream to read the encrypted file back.
            using (FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read))
            {
                byte[] byt = new byte[fsread.Length];
                fsread.Read(byt, 0, byt.Length);
                fsread.Flush();
                fsread.Close();
                //Create a DES decryptor from the DES instance.
                ICryptoTransform desdecrypt = DES.CreateDecryptor();
                MemoryStream ms = new MemoryStream();
                CryptoStream cryptostreamDecr = new CryptoStream(ms, desdecrypt, CryptoStreamMode.Write);
                cryptostreamDecr.Write(byt, 0, byt.Length);
                cryptostreamDecr.FlushFinalBlock();
                cryptostreamDecr.Close();
                return Encoding.UTF8.GetString(ms.ToArray()).Trim();
            }
        }
    }
}

  调用如下

  static void Main(string[] args)
        {
              sSecretKey = EncryptKit.GenerateKey();
            GCHandle gch = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned);

            EncryptKit.EncryptFile(@"config.dat", @"config.dat", sSecretKey);
            EncryptKit.DecryptFile(@"config.dat", @"Decrypted.dat", sSecretKey);
            string str = EncryptKit.DecryptFile("config.dat", sSecretKey);
            Console.WriteLine(sSecretKey);
            EncryptKit.ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
            gch.Free();
            Console.ReadKey();
        }

 

分享到:
评论

相关推荐

    C# RSA加密解密

    **C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...

    C#加密解密小工具,轻松实现数据加密解密

    C#编写的加密解密小工具,可以对DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求。 使用方法可浏览博文《C#集成数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求》

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

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

    C#文件加密解密(完整项目)

    本项目"文件加密解密(完整项目)"专注于利用C#进行文件的安全处理,确保数据在传输和存储时的隐私性。 一、C#加密技术基础 C#中实现文件加密主要依赖于.NET Framework提供的加密类库,如System.Security....

    C#加密解密DeEncryptHelper.zip

    解密文件 128位MD5算法加密字符串 128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密类。 加密 加密数据 解密 解密数据 得到随机安全码(哈希加密)。 得到随机哈希加密字符串 哈希加密一...

    c#加密解密加密解密加密解密加密解密加密解密

    c#加密解密加密解密加密解密加密解密加密解密c#加密解密加密解密加密解密加密解密加密解密

    C# 10种加密解密方式

    以下是对标题和描述中提及的10种C#加密解密方式的详细解释: 1. **MD5加密**:MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的摘要。虽然MD5已经不被认为安全用于...

    c#加密解密源码

    本文将围绕"C#加密解密源码"这一主题,深入探讨C#中加密解密的基本原理、常用算法以及如何通过源代码实现。 1. 加密与解密基础 - 加密:将明文转换为密文的过程,目的是保护数据的安全,防止未经授权的访问。 - ...

    c#加密解密类源码

    在.NET框架中,C#语言提供了丰富的加密和解密功能,可以用于保护数据的安全性,防止未经授权的访问。本文将详细解析C#中加密解密的相关...提供的源码可能包含了上述方法的实现,对于深入学习C#加密解密技术非常有价值。

    C#加密解密,包括DES、MD5、SHA256

    根据给定文件的信息,我们可以总结出关于C#中几种常用加密...通过以上代码示例,我们了解了如何在C#中实现DES加密解密、MD5和SHA256散列函数。这些技术在实际开发中非常有用,尤其是在保护用户数据的安全性和隐私方面。

    C#实现文件加密解密工具(AES算法)

    本篇将深入探讨如何利用C#和AES(高级加密标准)算法来创建一个文件加密解密工具。 AES是一种对称加密算法,广泛应用于数据保护,因为它既高效又安全。它的基本工作原理是通过一系列复杂的数学运算(如置换、混淆等...

    C# .net MD5加密解密工具及加密解密类

    C# .net MD5加密解密工具及加密解密类。使用方便,可直接下载加密解密代码在项目中使用。

    C#加密解密

    本篇文章将详细探讨C#中用于加密解密的核心概念、常用算法以及如何通过提供的`DEncrypt.cs`和`DESEncrypt.cs`文件进行操作。 首先,我们要理解加密和解密的基本原理。加密是将可读的数据(明文)转换为不可读的形式...

    C# 加密解密2种方式

    - **创建**:在Visual Studio中,可以创建一个新的Class Library项目,将加密解密的相关代码放入其中,编译后生成DLL文件。 - **使用**:在WinForms应用程序中,通过`Add Reference`添加DLL引用,然后就可以在代码...

    c#加密解密c#加密解密c#加密解密c#加密解密c#加密解密c#加密解密

    二、C#加密解密的API C#提供了System.Security.Cryptography命名空间,其中包含了许多加密和解密的类和方法。主要的API有: 1. Aes:高级加密标准(AES),一种对称加密算法,速度快,安全性高。 2. Rijndael:...

    C#加密和解密

    C#加密和解密C#加密和解密C#加密和解密C#加密和解密

    C#加密解密类及使用说明

    三、C#加密解密步骤 1. **选择合适的加密算法**:根据应用场景,如数据量、安全性需求等选择合适的加密算法。 2. **生成密钥和初始化向量(IV)**:密钥是加密的核心,必须妥善保管。IV是某些块加密算法的必需参数,...

    c#中对xml文件加密和解密完整代码

    在C#编程环境中,处理XML文件的加密和解密是一项重要的任务,特别是在处理敏感数据时。XML文件因为其结构清晰、易于解析而被广泛应用,但同时也需要妥善保护以防止未授权访问。以下是对C#中XML文件加密和解密的详细...

    c# 实现对文件的GPG 加密与解密

    c# 使用DidiSoft.Pgp来实现对文件的GPG 加密与解密 。GPG非对称加密需要公钥和私钥 :你的公钥的作用 :别人用来给你发加密的信息&别人验证你的签名,即加密&验证(别人来做) 你的私钥的作用 :你用来创建签名&...

    C#对压缩文件的加密解密.rar

    本资源"**C#对压缩文件的加密解密.rar**"显然是一个C#实现的项目,专注于在Winform应用程序中对zip、jar和rar三种常见压缩格式进行加密和解密的操作。 首先,让我们了解C#中的压缩技术。`System.IO.Compression`...

Global site tag (gtag.js) - Google Analytics