Asp.Net 文件加解密
来源:互联网 发布:kindle保护套推荐 知乎 编辑:程序博客网 时间:2024/05/01 05:31
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Security.Cryptography;using System.Text;using System.Threading.Tasks;namespace PD.Common{ public static class AES { #region 加密 #region 加密字符串 /// <summary> /// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// </summary> /// <param name="EncryptString">待加密密文</param> /// <param name="EncryptKey">加密密钥</param> public static string AESEncrypt(string EncryptString, string EncryptKey) { return Convert.ToBase64String(AESEncrypt(Encoding.Default.GetBytes(EncryptString), EncryptKey)); } #endregion #region 加密字节数组 /// <summary> /// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// </summary> /// <param name="EncryptString">待加密密文</param> /// <param name="EncryptKey">加密密钥</param> public static byte[] AESEncrypt(byte[] EncryptByte, string EncryptKey) { if (EncryptByte.Length == 0) { throw (new Exception("明文不得为空")); } if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密钥不得为空")); } byte[] m_strEncrypt; byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ=="); byte[] m_salt = Convert.FromBase64String("gsf4jvkyhye5/d7k8OrLgM=="); Rijndael m_AESProvider = Rijndael.Create(); try { MemoryStream m_stream = new MemoryStream(); PasswordDeriveBytes pdb = new PasswordDeriveBytes(EncryptKey, m_salt); ICryptoTransform transform = m_AESProvider.CreateEncryptor(pdb.GetBytes(32), m_btIV); CryptoStream m_csstream = new CryptoStream(m_stream, transform, CryptoStreamMode.Write); m_csstream.Write(EncryptByte, 0, EncryptByte.Length); m_csstream.FlushFinalBlock(); m_strEncrypt = m_stream.ToArray(); m_stream.Close(); m_stream.Dispose(); m_csstream.Close(); m_csstream.Dispose(); } catch (IOException ex) { throw ex; } catch (CryptographicException ex) { throw ex; } catch (ArgumentException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { m_AESProvider.Clear(); } return m_strEncrypt; } #endregion #endregion #region 解密 #region 解密字符串 /// <summary> /// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// </summary> /// <param name="DecryptString">待解密密文</param> /// <param name="DecryptKey">解密密钥</param> public static string AESDecrypt(string DecryptString, string DecryptKey) { return Convert.ToBase64String(AESDecrypt(Encoding.Default.GetBytes(DecryptString), DecryptKey)); } #endregion #region 解密字节数组 /// <summary> /// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// </summary> /// <param name="DecryptString">待解密密文</param> /// <param name="DecryptKey">解密密钥</param> public static byte[] AESDecrypt(byte[] DecryptByte, string DecryptKey) { if (DecryptByte.Length == 0) { throw (new Exception("密文不得为空")); } if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); } byte[] m_strDecrypt; byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ=="); byte[] m_salt = Convert.FromBase64String("gsf4jvkyhye5/d7k8OrLgM=="); Rijndael m_AESProvider = Rijndael.Create(); try { MemoryStream m_stream = new MemoryStream(); PasswordDeriveBytes pdb = new PasswordDeriveBytes(DecryptKey, m_salt); ICryptoTransform transform = m_AESProvider.CreateDecryptor(pdb.GetBytes(32), m_btIV); CryptoStream m_csstream = new CryptoStream(m_stream, transform, CryptoStreamMode.Write); m_csstream.Write(DecryptByte, 0, DecryptByte.Length); m_csstream.FlushFinalBlock(); m_strDecrypt = m_stream.ToArray(); m_stream.Close(); m_stream.Dispose(); m_csstream.Close(); m_csstream.Dispose(); } catch (IOException ex) { throw ex; } catch (CryptographicException ex) { throw ex; } catch (ArgumentException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { m_AESProvider.Clear(); } return m_strDecrypt; } #endregion #endregion }}
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PD.Common{ public class FileEncrypt { #region 变量 /// <summary> /// 一次处理的明文字节数 /// </summary> public static readonly int encryptSize = 10000000; /// <summary> /// 一次处理的密文字节数 /// </summary> public static readonly int decryptSize = 10000016; #endregion #region 加密文件 /// <summary> /// 加密文件 /// </summary> public static void EncryptFile(string Inputpath, string Outputpath, string pwd) { try { if (File.Exists(Inputpath)) { using (FileStream fs = new FileStream(Inputpath, FileMode.Open, FileAccess.Read)) { if (fs.Length > 0) { using (FileStream fsnew = new FileStream(Outputpath, FileMode.OpenOrCreate, FileAccess.Write)) { //if (File.Exists(path + ".temp")) File.SetAttributes(path + ".temp", FileAttributes.Hidden); int blockCount = ((int)fs.Length - 1) / encryptSize + 1; for (int i = 0; i < blockCount; i++) { int size = encryptSize; if (i == blockCount - 1) size = (int)(fs.Length - i * encryptSize); byte[] bArr = new byte[size]; fs.Read(bArr, 0, size); byte[] result = AES.AESEncrypt(bArr, pwd); fsnew.Write(result, 0, result.Length); fsnew.Flush(); } fsnew.Close(); fsnew.Dispose(); } fs.Close(); fs.Dispose(); } } } } catch (Exception ex) { throw ex; } } #endregion #region 解密文件 /// <summary> /// 解密文件 /// </summary> public static void DecryptFile(string Inputpath, string Outputpath, string pwd) { try { if (File.Exists(Inputpath)) { using (FileStream fs = new FileStream(Inputpath, FileMode.Open, FileAccess.Read)) { if (fs.Length > 0) { using (FileStream fsnew = new FileStream(Outputpath, FileMode.OpenOrCreate, FileAccess.Write)) { int blockCount = ((int)fs.Length - 1) / decryptSize + 1; for (int i = 0; i < blockCount; i++) { int size = decryptSize; if (i == blockCount - 1) size = (int)(fs.Length - i * decryptSize); byte[] bArr = new byte[size]; fs.Read(bArr, 0, size); byte[] result = AES.AESDecrypt(bArr, pwd); fsnew.Write(result, 0, result.Length); fsnew.Flush(); } fsnew.Close(); fsnew.Dispose(); } fs.Close(); fs.Dispose(); } } } } catch (Exception ex) { throw ex; } } #endregion }}
0 0
- Asp.Net 文件加解密
- Asp.Net 文件加解密
- Asp.net---可逆加解密函数
- asp.net&C#各种加密码解密
- Asp.net程序实现RC6_中文加解密
- .NET 加/解密
- 文件加解密
- 文件字节加解密
- C#文件加解密
- android文件加解密
- DES加解密文件
- 文件加解密方法
- DES文件加解密
- 文件加解密操作
- 文件AES加解密
- C#文件加解密
- ASP Base64加解密程序
- 文件加解密,可另存文件
- 获取 checkbox 和 radio 选定的值,以及设默认值
- linux内核数据结构之链表
- ORA-01219:数据库未打开:仅允许在固定表/视图中查询
- OpenCV中常用函数
- 三大运营商的号段汇总
- Asp.Net 文件加解密
- My97DatePicker
- dubbo教程及注意点
- TortoiseSVN中分支和合并实践
- 用户空间与内核空间,进程上下文与中断上下文[总结]
- 格雷码(Gray code)简单 c 实现
- SQL查询初学者指南读书笔记(四)where从句
- Android FragmentActivity onActivityResult冲突问题
- mysql六:优化MySQL的21个建议,让MySQL跑的更快,更稳定