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加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...
C#编写的加密解密小工具,可以对DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求。 使用方法可浏览博文《C#集成数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求》
带加密字符的 加密 解密方法 static string encryptKey = "加密... 自定义加密字符(加密解密必须一致才能解密) /// /// 加密字符串 /// /// name="str">要加密的字符串 /// 加密后的字符串
本项目"文件加密解密(完整项目)"专注于利用C#进行文件的安全处理,确保数据在传输和存储时的隐私性。 一、C#加密技术基础 C#中实现文件加密主要依赖于.NET Framework提供的加密类库,如System.Security....
解密文件 128位MD5算法加密字符串 128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密类。 加密 加密数据 解密 解密数据 得到随机安全码(哈希加密)。 得到随机哈希加密字符串 哈希加密一...
c#加密解密加密解密加密解密加密解密加密解密c#加密解密加密解密加密解密加密解密加密解密
以下是对标题和描述中提及的10种C#加密解密方式的详细解释: 1. **MD5加密**:MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的摘要。虽然MD5已经不被认为安全用于...
本文将围绕"C#加密解密源码"这一主题,深入探讨C#中加密解密的基本原理、常用算法以及如何通过源代码实现。 1. 加密与解密基础 - 加密:将明文转换为密文的过程,目的是保护数据的安全,防止未经授权的访问。 - ...
在.NET框架中,C#语言提供了丰富的加密和解密功能,可以用于保护数据的安全性,防止未经授权的访问。本文将详细解析C#中加密解密的相关...提供的源码可能包含了上述方法的实现,对于深入学习C#加密解密技术非常有价值。
根据给定文件的信息,我们可以总结出关于C#中几种常用加密...通过以上代码示例,我们了解了如何在C#中实现DES加密解密、MD5和SHA256散列函数。这些技术在实际开发中非常有用,尤其是在保护用户数据的安全性和隐私方面。
本篇将深入探讨如何利用C#和AES(高级加密标准)算法来创建一个文件加密解密工具。 AES是一种对称加密算法,广泛应用于数据保护,因为它既高效又安全。它的基本工作原理是通过一系列复杂的数学运算(如置换、混淆等...
C# .net MD5加密解密工具及加密解密类。使用方便,可直接下载加密解密代码在项目中使用。
本篇文章将详细探讨C#中用于加密解密的核心概念、常用算法以及如何通过提供的`DEncrypt.cs`和`DESEncrypt.cs`文件进行操作。 首先,我们要理解加密和解密的基本原理。加密是将可读的数据(明文)转换为不可读的形式...
- **创建**:在Visual Studio中,可以创建一个新的Class Library项目,将加密解密的相关代码放入其中,编译后生成DLL文件。 - **使用**:在WinForms应用程序中,通过`Add Reference`添加DLL引用,然后就可以在代码...
二、C#加密解密的API C#提供了System.Security.Cryptography命名空间,其中包含了许多加密和解密的类和方法。主要的API有: 1. Aes:高级加密标准(AES),一种对称加密算法,速度快,安全性高。 2. Rijndael:...
C#加密和解密C#加密和解密C#加密和解密C#加密和解密
三、C#加密解密步骤 1. **选择合适的加密算法**:根据应用场景,如数据量、安全性需求等选择合适的加密算法。 2. **生成密钥和初始化向量(IV)**:密钥是加密的核心,必须妥善保管。IV是某些块加密算法的必需参数,...
在C#编程环境中,处理XML文件的加密和解密是一项重要的任务,特别是在处理敏感数据时。XML文件因为其结构清晰、易于解析而被广泛应用,但同时也需要妥善保护以防止未授权访问。以下是对C#中XML文件加密和解密的详细...
c# 使用DidiSoft.Pgp来实现对文件的GPG 加密与解密 。GPG非对称加密需要公钥和私钥 :你的公钥的作用 :别人用来给你发加密的信息&别人验证你的签名,即加密&验证(别人来做) 你的私钥的作用 :你用来创建签名&...
本资源"**C#对压缩文件的加密解密.rar**"显然是一个C#实现的项目,专注于在Winform应用程序中对zip、jar和rar三种常见压缩格式进行加密和解密的操作。 首先,让我们了解C#中的压缩技术。`System.IO.Compression`...