AES加密和解密文件

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();
      }
   }
}


----------------------------------------------------------------------------------------------------------

大文件分块加密和解密

using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Security.Cryptography;

namespace VideoEncrypt
{
    class Program
    {
        static void Main(string[] args)
        {
            RijndaelManaged rij = new RijndaelManaged();
            rij.KeySize = 128;

            string fp = @"E://friends//3//3.mkv";
            string sPhysicalFilePath = @"E://friends//3//o3.mkv";
            string fw = @"E://friends//3//dd3.mkv";
            Console.WriteLine("Encrypting begin...");
            encryption(rij, fp, sPhysicalFilePath);
            decryption(rij,sPhysicalFilePath,fw);

        }
        //用于加密的函数
        public static void encryption(RijndaelManaged rij,string readfile, string writefile)
        {
            try
            {
                    byte[] key = rij.Key;
                    byte[] iv = rij.IV;
                    byte[] buffer = new byte[4096];
                    Rijndael crypt = Rijndael.Create();
                    ICryptoTransform transform = crypt.CreateEncryptor(key, iv);
                    //写进文件
                    FileStream fswrite = new FileStream(writefile, FileMode.Create);
                    CryptoStream cs = new CryptoStream(fswrite, transform, CryptoStreamMode.Write);
                    //打开文件
                    FileStream fsread = new FileStream(readfile, FileMode.Open);
                    int length;
                    //while ((length = fsread.ReadByte()) != -1)
                        //cs.WriteByte((byte)length);
                    while ((length = fsread.Read(buffer, 0, 4096)) > 0)
                        cs.Write(buffer, 0, (int)length);

                    fsread.Close();
                    cs.Close();
                    fswrite.Close();
                    Console.WriteLine("Encrypt Success");
            }
            catch (Exception e)
            {
                Console.WriteLine("Encrypt Faile"+e.ToString());
            }
        }
        //用于解密的函数
        public static void decryption(RijndaelManaged rij, string readfile, string writefile)
        {
            try
            {
                byte[] key = rij.Key;
                byte[] iv = rij.IV;
                byte[] buffer=new byte[4096];
                    Rijndael crypt = Rijndael.Create();
                    ICryptoTransform transform = crypt.CreateDecryptor(key, iv);
                    //读取加密后的文件 
                    FileStream fsopen = new FileStream(readfile, FileMode.Open);
                    CryptoStream cs = new CryptoStream(fsopen, transform, CryptoStreamMode.Read);
                    //把解密后的结果写进文件
                    FileStream fswrite = new FileStream(writefile, FileMode.OpenOrCreate);
                    
                    int length;
                    //while ((length = cs.ReadByte()) != -1)
                        //fswrite.WriteByte((byte)length);
                    while ((length = cs.Read(buffer, 0, 4096)) > 0)
                        fswrite.Write(buffer, 0, (int)length);
                    fswrite.Close();
                    cs.Close();
                    fsopen.Close();
                    Console.WriteLine("Decrypt Success");
            }
            catch (Exception e)
            {
                Console.WriteLine("Decrypt Failed"+e.ToString());
            }
        }
    }
}

转载于:https://www.cnblogs.com/QIAOYIJUN/archive/2013/05/02/3054072.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的uniapp中使用AES加密解密的示例代码: ```javascript // 加密 function encryptData(data, key, iv) { const cipher = uniCrypto.createCipheriv('aes-128-cbc', key, iv) let encrypted = cipher.update(data, 'utf8', 'base64') encrypted += cipher.final('base64') return encrypted } // 解密 function decryptData(data, key, iv) { const decipher = uniCrypto.createDecipheriv('aes-128-cbc', key, iv) let decrypted = decipher.update(data, 'base64', 'utf8') decrypted += decipher.final('utf8') return decrypted } // 使用示例 const data = 'Hello World!' const key = '1234567812345678' const iv = '8765432187654321' const encrypted = encryptData(data, key, iv) console.log('加密后的数据:', encrypted) const decrypted = decryptData(encrypted, key, iv) console.log('解密后的数据:', decrypted) ``` 在上面的代码中,`encryptData`函数接收要加密的数据、加密密钥和初始化向量(iv),并使用`uniCrypto.createCipheriv`方法创建一个AES加密器,然后使用`cipher.update`和`cipher.final`方法进行加密,最后返回加密后的数据。 `decryptData`函数接收要解密的数据、解密密钥和初始化向量(iv),并使用`uniCrypto.createDecipheriv`方法创建一个AES解密器,然后使用`decipher.update`和`decipher.final`方法进行解密,最后返回解密后的数据。 在使用时,只需将要加密的数据、加密密钥和初始化向量(iv)传递给`encryptData`函数即可获得加密后的数据,将加密后的数据、解密密钥和初始化向量(iv)传递给`decryptData`函数即可获得解密后的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值