• 如何加密和解密文件


    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();
          }
       }
    }
  • 相关阅读:
    首评 | 阿里云顺利完成国内首个云原生安全成熟度评估
    基于任务调度的企业级分布式批处理方案
    阿里云发布性能测试 PTS 2.0:低成本、高效率、多场景压测,业务稳定性保障利器
    OpenKruise v1.2:新增 PersistentPodState 实现有状态 Pod 拓扑固定与 IP 复用
    ZooKeeper 在阿里巴巴的服务形态演进
    阿里云微服务引擎 MSE 5 月产品动态
    应用实时监控服务ARMS 5 月功能快报&优惠汇总
    618 大促来袭,浅谈如何做好大促备战
    「技术人生」第8篇:如何画业务大图
    Serverless Job——传统任务新变革
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/2782256.html
Copyright © 2020-2023  润新知