`
devgis
  • 浏览: 139346 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

AES对媒体文件的加密与解密

 
阅读更多
usingSystem.Text;
002 usingSystem.Collections;
003 usingSystem.ComponentModel;
004 usingSystem.Data;
005 usingSystem.Net;
006 usingSystem.Net.Sockets;
007 usingSystem.Threading;
008 usingSystem.IO;
009 usingSystem.Security.Cryptography;
010
011 publicclassAESEncryption
012 {
013
014 staticstringstrKey="dongbinhuiasxiny";//密钥,128位,也可以改为192位(24字节)或256位(32字节)。
015 staticvoidMain(string[] args)
016 {
017 RijndaelManaged rij =newRijndaelManaged();
018 rij.KeySize = 128;//指定密钥长度
019
020 stringfp =@"...";//待加密文件
021 stringsPhysicalFilePath =@"...";//加密后的文件
022 stringfw =@"...";//解密后的文件
023 Console.WriteLine("Encrypting begin...");
024 encryption(rij, fp, sPhysicalFilePath);
025 decryption(rij,sPhysicalFilePath,fw);
026
027 }
028 //用于加密的函数
029 publicstaticvoidencryption(RijndaelManaged rij,stringreadfile,stringwritefile)
030 {
031 try
032 {
033 //byte[] key = rij.Key;
034 byte[] key=Encoding.UTF8.GetBytes (strKey);
035 byte[] iv = rij.IV;
036 byte[] buffer =newbyte[4096];
037 Rijndael crypt = Rijndael.Create();
038 ICryptoTransform transform = crypt.CreateEncryptor(key, iv);
039 //写进文件
040 FileStream fswrite =newFileStream(writefile, FileMode.Create);
041 CryptoStream cs =newCryptoStream(fswrite, transform, CryptoStreamMode.Write);
042 //打开文件
043 FileStream fsread =newFileStream(readfile, FileMode.Open);
044
045 /*------------------定位要加密的部分-----------------*/
046 long_file_size=fsread.Length;
047 byte[] _header =newbyte[8];
048 //定位GUID
049 fsread.Seek(16, SeekOrigin.Begin);
050 //读取header size
051 fsread.Read(_header, 0, _header.Length);
052 //头部长度
053 long_header_size = (long)BitConverter.ToInt32(_header, 0);
054 byte[] _header_buffer=newbyte[_header_size];
055 fsread.Seek(0,SeekOrigin.Begin);
056 fsread.Read(_header_buffer,0,_header_buffer.Length);
057 //头部写入新文件
058 fswrite.Write(_header_buffer,0,_header_buffer.Length);
059 //定位到头部,准备读取需要加密的部分
060 fsread.Seek(_header_size,SeekOrigin.Begin);
061 /*-----------------定位加密部分完成-------------------*/
062 intlength;
063 //while ((length = fsread.ReadByte()) != -1)
064 //cs.WriteByte((byte)length);
065 while((length = fsread.Read(buffer, 0, 4096)) > 0){
066 cs.Write(buffer, 0, (int)length);
067 }
068
069 fsread.Close();
070 cs.Close();
071 fswrite.Close();
072 Console.WriteLine("Encrypt Success");
073 }
074 catch(Exception e)
075 {
076 Console.WriteLine("Encrypt Faile"+e.ToString());
077 }
078 }
079 //用于解密的函数
080 publicstaticvoiddecryption(RijndaelManaged rij,stringreadfile,stringwritefile)
081 {
082 try
083 {
084 //byte[] key = rij.Key;
085 byte[] key=Encoding.UTF8.GetBytes (strKey);
086 byte[] iv = rij.IV;
087 byte[] buffer=newbyte[4096];
088 Rijndael crypt = Rijndael.Create();
089 ICryptoTransform transform = crypt.CreateDecryptor(key, iv);
090 //读取加密后的文件
091 FileStream fsopen =newFileStream(readfile, FileMode.Open);
092 CryptoStream cs =newCryptoStream(fsopen, transform, CryptoStreamMode.Read);
093 //把解密后的结果写进文件
094 FileStream fswrite =newFileStream(writefile, FileMode.OpenOrCreate);
095 /*------------------定位要解密的部分-----------------*/
096 long_file_size=fsopen.Length;
097 byte[] _header =newbyte[8];
098 //定位GUID
099 fsopen.Seek(16, SeekOrigin.Begin);
100 //读取header size
101 fsopen.Read(_header, 0, _header.Length);
102 //头部长度
103 long_header_size = (long)BitConverter.ToInt32(_header, 0);
104 byte[] _header_buffer=newbyte[_header_size];
105 fsopen.Seek(0,SeekOrigin.Begin);
106 fsopen.Read(_header_buffer,0,_header_buffer.Length);
107 //头部写入新文件
108 fswrite.Write(_header_buffer,0,_header_buffer.Length);
109 //定位到头部,准备读取需要加密的部分
110 fsopen.Seek(_header_size,SeekOrigin.Begin);
111 /*-----------------定位要解密的部分完成-------------------*/
112
113 intlength;
114 //while ((length = cs.ReadByte()) != -1)
115 //fswrite.WriteByte((byte)length);
116 while((length = cs.Read(buffer, 0, 4096)) > 0){
117 fswrite.Write(buffer, 0, (int)length);
118 }
119 fswrite.Close();
120 cs.Close();
121 fsopen.Close();
122 Console.WriteLine("Decrypt Success");
123 }
124 catch(Exception e)
125 {
126 Console.WriteLine("Decrypt Failed"+e.ToString());
127 }
128 }
129 }
usingSystem;
002 usingSystem.IO;
003 usingSystem.Security;
004 usingSystem.Security.Cryptography;
005 usingSystem.Runtime.InteropServices;
006 usingSystem.Text;
007
008 namespaceCSEncryptDecrypt
009 {
010 classClass1
011 {
012 // Call this function to remove the key from memory after use for security
013 [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
014 publicstaticexternboolZeroMemory(IntPtr Destination,intLength);
015
016 // Function to Generate a 64 bits Key.
017 staticstringGenerateKey()
018 {
019 // Create an instance of Symetric Algorithm. Key and IV is generated automatically.
020 DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
021
022 // Use the Automatically generated key for Encryption.
023 returnASCIIEncoding.ASCII.GetString(desCrypto.Key);
024 }
025
026 staticvoidEncryptFile(stringsInputFilename,
027 stringsOutputFilename,
028 stringsKey)
029 {
030 FileStream fsInput =newFileStream(sInputFilename,
031 FileMode.Open,
032 FileAccess.Read);
033
034 FileStream fsEncrypted =newFileStream(sOutputFilename,
035 FileMode.Create,
036 FileAccess.Write);
037 DESCryptoServiceProvider DES =newDESCryptoServiceProvider();
038 DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
039 DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
040 ICryptoTransform desencrypt = DES.CreateEncryptor();
041 CryptoStream cryptostream =newCryptoStream(fsEncrypted,
042 desencrypt,
043 CryptoStreamMode.Write);
044
045 byte[] bytearrayinput =newbyte[fsInput.Length];
046 fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
047 cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
048 cryptostream.Close();
049 fsInput.Close();
050 fsEncrypted.Close();
051 }
052
053 staticvoidDecryptFile(stringsInputFilename,
054 stringsOutputFilename,
055 stringsKey)
056 {
057 DESCryptoServiceProvider DES =newDESCryptoServiceProvider();
058 //A 64 bit key and IV is required for this provider.
059 //Set secret key For DES algorithm.
060 DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
061 //Set initialization vector.
062 DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
063
064 //Create a file stream to read the encrypted file back.
065 FileStream fsread =newFileStream(sInputFilename,
066 FileMode.Open,
067 FileAccess.Read);
068 //Create a DES decryptor from the DES instance.
069 ICryptoTransform desdecrypt = DES.CreateDecryptor();
070 //Create crypto stream set to read and do a
071 //DES decryption transform on incoming bytes.
072 CryptoStream cryptostreamDecr =newCryptoStream(fsread,
073 desdecrypt,
074 CryptoStreamMode.Read);
075 //Print the contents of the decrypted file.
076 StreamWriter fsDecrypted =newStreamWriter(sOutputFilename);
077 fsDecrypted.Write(newStreamReader(cryptostreamDecr).ReadToEnd());
078 fsDecrypted.Flush();
079 fsDecrypted.Close();
080 }
081
082 staticvoidMain()
083 {
084 // Must be 64 bits, 8 bytes.
085 // Distribute this key to the user who will decrypt this file.
086 stringsSecretKey;
087
088 // Get the Key for the file to Encrypt.
089 sSecretKey = GenerateKey();
090
091 // For additional security Pin the key.
092 GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );
093
094 // Encrypt the file.
095 EncryptFile(@"C:\MyData.txt",
096 @"C:\Encrypted.txt",
097 sSecretKey);
098
099 // Decrypt the file.
100 DecryptFile(@"C:\Encrypted.txt",
101 @"C:\Decrypted.txt",
102 sSecretKey);
103
104 // Remove the Key from memory.
105 ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
106 gch.Free();
107 }
108 }
109 }

[代码]大文件分块加密和解密

01 usingSystem.Text;
02 usingSystem.Collections;
03 usingSystem.ComponentModel;
04 usingSystem.Data;
05 usingSystem.Net;
06 usingSystem.Net.Sockets;
07 usingSystem.Threading;
08 usingSystem.IO;
09 usingSystem.Security.Cryptography;
10
11 namespaceVideoEncrypt
12 {
13 classProgram
14 {
15 staticvoidMain(string[] args)
16 {
17 RijndaelManaged rij =newRijndaelManaged();
18 rij.KeySize = 128;
19
20 stringfp =@"E://friends//3//3.mkv";
21 stringsPhysicalFilePath =@"E://friends//3//o3.mkv";
22 stringfw =@"E://friends//3//dd3.mkv";
23 Console.WriteLine("Encrypting begin...");
24 encryption(rij, fp, sPhysicalFilePath);
25 decryption(rij,sPhysicalFilePath,fw);
26
27 }
28 //用于加密的函数
29 publicstaticvoidencryption(RijndaelManaged rij,stringreadfile,stringwritefile)
30 {
31 try
32 {
33 byte[] key = rij.Key;
34 byte[] iv = rij.IV;
35 byte[] buffer =newbyte[4096];
36 Rijndael crypt = Rijndael.Create();
37 ICryptoTransform transform = crypt.CreateEncryptor(key, iv);
38 //写进文件
39 FileStream fswrite =newFileStream(writefile, FileMode.Create);
40 CryptoStream cs =newCryptoStream(fswrite, transform, CryptoStreamMode.Write);
41 //打开文件
42 FileStream fsread =newFileStream(readfile, FileMode.Open);
43 intlength;
44 //while ((length = fsread.ReadByte()) != -1)
45 //cs.WriteByte((byte)length);
46 while((length = fsread.Read(buffer, 0, 4096)) > 0)
47 cs.Write(buffer, 0, (int)length);
48
49 fsread.Close();
50 cs.Close();
51 fswrite.Close();
52 Console.WriteLine("Encrypt Success");
53 }
54 catch(Exception e)
55 {
56 Console.WriteLine("Encrypt Faile"+e.ToString());
57 }
58 }
59 //用于解密的函数
60 publicstaticvoiddecryption(RijndaelManaged rij,stringreadfile,stringwritefile)
61 {
62 try
63 {
64 byte[] key = rij.Key;
65 byte[] iv = rij.IV;
66 byte[] buffer=newbyte[4096];
67 Rijndael crypt = Rijndael.Create();
68 ICryptoTransform transform = crypt.CreateDecryptor(key, iv);
69 //读取加密后的文件
70 FileStream fsopen =newFileStream(readfile, FileMode.Open);
71 CryptoStream cs =newCryptoStream(fsopen, transform, CryptoStreamMode.Read);
72 //把解密后的结果写进文件
73 FileStream fswrite =newFileStream(writefile, FileMode.OpenOrCreate);
74
75 intlength;
76 //while ((length = cs.ReadByte()) != -1)
77 //fswrite.WriteByte((byte)length);
78 while((length = cs.Read(buffer, 0, 4096)) > 0)
79 fswrite.Write(buffer, 0, (int)length);
80 fswrite.Close();
81 cs.Close();
82 fsopen.Close();
83 Console.WriteLine("Decrypt Success");
84 }
85 catch(Exception e)
86 {
87 Console.WriteLine("Decrypt Failed"+e.ToString());
88 }
89 }
90 }
91 }

分享到:
评论

相关推荐

    java 基于AES实现对文件的加密 解密

    在实现AES加密解密时,要特别注意错误处理和数据完整性检查。例如,确保文件读取和写入的正确性,以及在解密过程中处理可能的异常。此外,www.willvc.com.cn 提供的资源可能是进一步学习和解决问题的途径。 总之,...

    qt5AES加密,ES加密/解密算法是一种可逆的对称加密算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推

    这个文件可能包含了实现AES加密解密功能的源代码、示例、文档或其他相关资源,帮助开发者在Qt5应用程序中集成AES加密。 **总结** AES加密算法是现代加密的标准之一,常用于保护数据的安全。在Qt5开发中,可以方便...

    Qt实现AES加密解密

    这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战例程可以帮助开发者更好地掌握Qt环境下的加密解密操作,提高数据安全保护能力。

    (AES算法)能对文件进行加密解密

    该源码具有以下功能: 1.具有AES算法(高级加密标准)的实现类源码 2.在我的源码中使用AES对象进行文件加密和解密

    AES.rar_aes ts_aes加密ts_ts 文件 aes_ts视频解密_解密 TS

    "aes加密ts"表明AES被用作加密手段,"ts视频解密"和"解密_ts"则提到了解密TS视频文件的过程。这个过程可能包括读取密文TS文件,使用正确的密钥进行解密,以及解复用和解码以得到原始的视频流。 在压缩包的文件名称...

    android使用AES加密和解密文件实例代码

    本文将详细介绍 Android 使用 AES 加密和解密文件的实例代码,并对相关知识点进行详细的解释。 AES 加密算法 AES(Advanced Encryption Standard)是一种对称密钥块加密算法,是一种快速、安全的加密算法。AES ...

    Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes

    总的来说,这个资源为Delphi开发者提供了一种实现AES加密解密的方式,并且保证了与Java平台的兼容性。通过理解和应用这些代码,开发者可以增强他们的应用程序在数据安全方面的性能,同时也能更好地与其他Java应用...

    AES加密解密实验报告

    通过AES加密解密实验,学生不仅能够掌握加密和解密的基本原理,还能实际操作,提升对密码学的理解,为信息安全领域的实践工作奠定基础。同时,这也有助于培养分析和解决实际问题的能力,因为加密技术在当今数字化...

    AES256加密及解密

    AES256是一种高级加密标准(Advanced Encryption Standard),是目前广泛应用的数据加密算法,以其强大的安全性、效率和灵活性而闻名。该标准由NIST(美国国家标准...这些知识点对于理解并实现AES256加密解密至关重要。

    AES加密_解密_verilog代码.rar_AES_AES加密_AES加密解密_Verilog AES_aes verilog

    压缩包中的“AES加密_解密_verilog代码.docx”文件很可能是详细介绍了如何用Verilog编写AES加密解密模块的文档,包括具体的代码示例和设计说明。阅读这份文档可以帮助你理解AES算法在Verilog中的实现细节,以及如何...

    uniapp 前后端AES加密解密.rar

    本压缩包"uniapp 前后端AES加密解密.rar"正是为了解决这一问题,它包含了在uniapp环境下实现前后端AES加密解密的方法。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,具有...

    AES-128-CBC加密解密

    在Java中实现AES-128-CBC加密解密,你需要以下关键步骤: 1. 导入必要的库:`javax.crypto.Cipher`,`java.security.SecureRandom`,`java.util.Base64`等。 2. 创建密钥:首先,你需要一个128位的密钥。可以使用`...

    AES实现前端JS和后端java加密解密

    后端Java实现AES加密解密: 1. **导入依赖**:在Java中,我们需要添加Apache Commons Codec库来处理Base64编码,以及Java Cryptography Extension (JCE)来支持AES操作。确保JCE未受限制,因为默认情况下,Java对某些...

    Qt实现AES加密和解密

    总之,虽然Qt本身不内置AES加密,但结合第三方库和Qt的现有组件,我们可以方便地实现AES加密和解密,为应用程序提供必要的安全保护。在开发过程中,务必遵循最佳实践,确保数据的完整性和安全性。

    jquery实现aes加密,后端php解密

    在提供的aes_demo压缩包中,可能包含了示例代码、说明文档等内容,帮助开发者理解并实现这个加密解密过程。通过对这些资源的深入学习和实践,可以更好地理解和应用这个前端jQuery加密、后端PHP解密的方案。

    java aes128/256 对称加密解密,rsa对称加密解密验签实现

    支持任何形式的aes加密,文件,字符,字节等,内含php代码,可以与php平台实现aes加密,而且包含rsa非对称加密签名验签实现,都是对字节数组的加密解密,签名验签,支持多种形式的的,可以将待操作的对象转换成字节...

    C#写的大文件AES加密解密程序

    本项目"大文件AES加密解密程序"就是针对这一需求而设计的,适用于VS2019开发环境,可能无法在较低版本的Visual Studio中正常运行。 AES,全称为Advanced Encryption Standard,是一种广泛使用的对称加密算法,以其...

    php+uni-app AES加密解密.rar

    在uni-app中,可以使用JavaScript的crypto-js库来实现AES加密解密。首先,你需要通过HBuilderX引入该库,然后在uni-app代码中使用: ```javascript const CryptoJS = require('crypto-js'); const key = 'your_...

    Java实现AES加密和解密算法

    然而,仅依赖AES加密可能不够安全,因为如果攻击者获取到相同的密钥,他们就能解密数据。因此,通常会结合密钥管理策略,如使用密钥派生函数(KDFs)或密钥协商协议,以及使用非对称加密(如RSA)来安全地交换AES...

    uni-app aes的加密和解密

    uni-app aes的加密和解密

Global site tag (gtag.js) - Google Analytics