文件加密及解密

原文:文件加密及解密

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.IO;
 5 using System.Runtime.Serialization;
 6 using System.Security.Cryptography;
 7
 8 namespace Sky.Decrypt
 9 {
10     /// <summary>
11     /// 解密
12     /// </summary>
13     public class Decryption
14     {
15         public Decryption()
16         {
17         }
18
19         /// <summary>
20         /// 获取文件内容——字符串
21         /// </summary>
22         /// <param name="path">文件路径</param>
23         /// <returns>文件内容</returns>
24         public string GetString(string path)
25         {
26             return this.DeserializeFile(path);
27         }
28
29         /// <summary>
30         /// 反序列化文件
31         /// </summary>
32         /// <param name="path">文件路径</param>
33         /// <returns>文件内容</returns>
34         private string DeserializeFile(string path)
35         {
36             string str = "";
37
38             if(!File.Exists(path))
39             {
40                 throw new Exception("File is not exist!");
41             }
42
43             IFormatter binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
44             using(FileStream fileStream=new FileStream(path,FileMode.Open,FileAccess.Read))
45             {
46                 str = (string)binaryFormatter.Deserialize(fileStream);
47                 fileStream.Close();
48             }
49
50             return str;
51         }
52
53         public string DecryptString(string data,string key)
54         {
55             string str = string.Empty;
56
57             if(string.IsNullOrEmpty(data))
58             {
59                 throw new Exception("data is empty");
60             }
61
62             MemoryStream ms = new MemoryStream();
63             byte[] myKey = Encoding.UTF8.GetBytes(key);
64             byte[] myIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
65
66             DES myProvider = new DESCryptoServiceProvider();
67             CryptoStream cs = new CryptoStream(ms, myProvider.CreateDecryptor(myKey, myIV), CryptoStreamMode.Write);
68
69             try
70             {
71                 byte[] bs =Convert.FromBase64String(data);
72                 cs.Write(bs, 0, bs.Length);
73                 cs.FlushFinalBlock();
74                 str = Encoding.UTF8.GetString(ms.ToArray());
75             }
76             finally
77             {
78                 cs.Close();
79                 ms.Close();
80             }
81             return str;
82         }
83     }
84 }

加密:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;
using System.IO;
using System.Security.Cryptography;

namespace Sky.Encrypt
{
    /// <summary>
    /// 加密
    /// </summary>
    public class Encryption
    {
        /// <summary>
        /// 生成证书文件
        /// </summary>
        /// <param name="data">注册信息</param>
        /// <param name="fileName">证书文件路径</param>
        /// <param name="key"></param>
        public void GenerateFile(string data,string fileName,string key)
        {
            string str = this.EncryptString(data, key);
            this.SerializeFile(str,fileName);
        }

        /// <summary>
        /// 序列化对象
        /// </summary>
        /// <param name="data">数据字符串</param>
        /// <param name="path">文件路径</param>
        private void SerializeFile(string data, string path)
        {
            IFormatter binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            if(data!=null)
            {
                using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
                {
                    binaryFormatter.Serialize(fileStream, data);
                    fileStream.Close();
                }
            }
        }

        public string EncryptString(string data, string key)
        {
            string str = string.Empty;

            if(string.IsNullOrEmpty(data))
            {
                return str;
            }

            MemoryStream ms = new MemoryStream();
            byte[] myKey = Encoding.UTF8.GetBytes(key);
            byte[] myIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

            DES myProvider = new DESCryptoServiceProvider();
            CryptoStream cs = new CryptoStream(ms, myProvider.CreateEncryptor(myKey, myIV), CryptoStreamMode.Write);

            try
            {
                byte[] bs = Encoding.UTF8.GetBytes(data);
                cs.Write(bs, 0, bs.Length);
                cs.FlushFinalBlock();
                str = Convert.ToBase64String(ms.ToArray());
            }
            finally
            {
                cs.Close();
                ms.Close();
            }
            return str;
        }
    }
}

调用加密文件:

Encryption encry = new Encryption();

string xmldata = File.ReadAllText("文件路径1");

string data = encry.EncryptString(xmldata,"abcdefgh");//abcdefgh关键,密码

File.WriteAllText("保存到文件2",data);

解密

Decryption decrypt = new Decryption();

string strData = File.ReadAllText("保存到文件2");

string newData = decrypt.DecryptString(strData,"abcdefgh");//abcdefgh加密是的密钥

 

 

 

 

时间: 2024-11-01 16:25:12

文件加密及解密的相关文章

采用Cipher DES针对文件加密、解密

由于经常用一些加密或者解密文件的,所以写了一个简单的采用Cipher DES针对文件加密.解密的工具类,记录一下,防止以后忘记了! import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStrea

C#使用RSA证书文件加密和解密示例

原文:C#使用RSA证书文件加密和解密示例 修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题. Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定状态下使用(Key not valid for use in specified state). A:导入带有私钥的证书时,需要使用"X509KeyStorageFlags"参数标记"私钥可导出". X509Certifica

算法-求教,我刚学,请大神帮我看一下,这是我c#文件加密与解密程序,为啥运行的时候有时正常,有时出错

问题描述 求教,我刚学,请大神帮我看一下,这是我c#文件加密与解密程序,为啥运行的时候有时正常,有时出错 int Key Key1; while (true) { Console.WriteLine(""加密请输入(1)解密请输入(2)""); int n = int.Parse(Console.ReadLine()); if (n == 1) { Console.WriteLine(""---------------加密------------

.net 下文件加密和解密

加密|解密 关键词:.net 2005  Framework 加密解密文件正文:用XML文件记录配置信息时,有时候不希望别人看到配置信息的内容.怎么才能实现呢.这里介绍几种常见的加密和解密算法.这些算法Framework已经封装好了.我们不用理会具体的实现,只需要会用就行.下面给出一个源程序供大家参考.using System;using System.Security.Cryptography;using System.IO;using System.Text;namespace coder{

bat文件加密 bat解密脚本(让bat乱码现形)_DOS/BAT

bat加密脚本(保存为.BAT文件) @echo off cls color 2a :start cls echo ******************************************************************************* echo * * echo * BAT 加 密 最 终 版 * echo * * echo ******************************************************************

c语言-C文件(汉字)加密和解密

问题描述 C文件(汉字)加密和解密 C文件(汉字)加密和解密里直接用加解密字符串的可以吗?新手不太懂,但愿高手指点迷津,可以的话,例子就更加直观了 解决方案 不管是什么文件,汉字还是图片,都当作二进制数据来处理. http://blog.csdn.net/xuyong7/article/details/6070886 这里有个完整的例子,用的是异或加密. 两次加密就相当于解密. 解决方案二: C++ 简单的文件加密和解密 实例给hibernate配置文件加密 解密的方案C 使用异或(xor)加密

php使用异或(XOR)加密和解密文件

php 使用异或(XOR)加密/解密文件 原理:将文件每一个字节与key作位异或运算(XOR),解密则再执行一次异或运算. 代码如下: 01.<?php 02.03.$source = 'test.jpg';04.$encrypt_file = 'test_enc.jpg';05.$decrypt_file = 'test_dec.jpg';06.$key = 'D89475D32EA8BBE933DBD299599EEA3E';07.08.echo '<p>source:</p&

PB连接描述文件的密码加密及其解密原理

本文阐述PB开发环境下数据库连接描述文件的密码加密和解密原理. 加密原理:首先将原字符串反转(reverse),逐个字符取ASCII并由10进制转为16进制值,然后转为小写,最后末尾加'00'作为结束符.解密原理:去掉末尾'00',将原字符串反转(reverse),每2个字符由16进制转为10进制值,即ASCII值,根据ASCII取字符,累积到一个字符串,这就是真正的登录密码. 在PB开发环境下要连接数据库必须预先创建一个描述文件,该描述文件的条目写在注册表HKEY_CURRENT_USERSo

用超级加密3000给文件加密解密的方法

本软件是一个功能强大.安全高效,简单易用的数据加密和保护软件. 它有超快和最强的文件夹,文件加密功能.数据保护功能,文件夹.文件的粉碎删除以及文件夹伪装等功能. 1.运行软件 双击桌面上的图标 或者点击"开始→程序→超级加密3000→超级加密3000"即可运行该软件.进入软件主界面. 超级加密3000的界面有点类似于资源管理器的界面,看上去非常简洁,功能按钮在上方一目了然.左侧的目录树空格及右侧的目录内容空格使得文件的选择非常方便. 二.蔠级加密3000的功能之一磁盘保护 该软件还提供