zoukankan      html  css  js  c++  java
  • 如何加密和解密文件

    using System;
    using System.IO;
    using System.Security;
    using System.Security.Cryptography;
    using System.Runtime.InteropServices;
    using System.Text;
    
    namespace CSEncryptDecrypt
    {
       class Class1
       {
          //  Call this function to remove the key from memory after use for security
          [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
          public static extern bool ZeroMemory(IntPtr Destination, int Length);
    		
          // Function to Generate a 64 bits Key.
          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);
          }
    
          static void EncryptFile(string sInputFilename,
             string sOutputFilename, 
             string sKey) 
          {
             FileStream fsInput = new FileStream(sInputFilename, 
                FileMode.Open, 
                FileAccess.Read);
    
             FileStream fsEncrypted = new FileStream(sOutputFilename, 
                FileMode.Create, 
                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); 
    
             byte[] bytearrayinput = new byte[fsInput.Length];
             fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
             cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
             cryptostream.Close();
             fsInput.Close();
             fsEncrypted.Close();
          }
    
          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.
             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();
          } 
    
          static void Main()
          {
             // Must be 64 bits, 8 bytes.
             // Distribute this key to the user who will decrypt this file.
             string sSecretKey;
             
             // Get the Key for the file to Encrypt.
             sSecretKey = GenerateKey();
    
             // For additional security Pin the key.
             GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );
             
             // Encrypt the file.        
             EncryptFile(@"C:\MyData.txt", 
                @"C:\Encrypted.txt", 
                sSecretKey);
    
             // Decrypt the file.
             DecryptFile(@"C:\Encrypted.txt", 
                @"C:\Decrypted.txt", 
                sSecretKey);
    
             // Remove the Key from memory. 
             ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
             gch.Free();
          }
       }
    }
  • 相关阅读:
    八进制转换成十进制(你会明白的,呵呵)
    从键盘读取7个数(150)的整数值,每读一个值打印出该值个数的*号.
    两个字符串的连接程序
    判断一个素数能被几个9整除.
    809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
    一个偶数总能表示为两个素数的和.
    07所能组成的奇数的个数
    asp.net .ashx文件使用Server.MapPath解决方法
    MVC常见问题小总结
    amcharts_2.6.13左上角的广告咱去掉
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/2782256.html
Copyright © 2011-2022 走看看