您的位置:首页 > 编程语言 > C#

AES加密,解密 C# .net 解密支持大文件

2014-11-14 10:52 162 查看
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AES加解密Encode.aspx.cs" Inherits="数据算法_AES加解密Encode" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body text="fd">
<form id="form1" runat="server">
<div>

<fieldset>
<legend>加密</legend>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server"
Text="加密提交数据" OnClick="Button1_Click" />

</fieldset>
<br />

<fieldset>
<legend>解密</legend>

<asp:FileUpload ID="FileUpload2" runat="server" />

<asp:Button ID="Button2" runat="server"
Text="解密提交数据" OnClick="Button2_Click"  />

</fieldset>

</div>
</form>
</body>
</html>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class 数据算法_AES加解密Encode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

/// <summary>
/// 提交数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
//创建一个加密key
string guid = Guid.NewGuid().ToString().Replace("-", "");
byte[] ByteKey = System.Text.UTF8Encoding.UTF8.GetBytes(guid.ToCharArray());
System.Security.Cryptography.AesManaged Aes = new System.Security.Cryptography.AesManaged();
var encode = Aes.CreateEncryptor(ByteKey, ByteKey.Take(16).ToArray());

byte[] byteArray = new byte[FileUpload1.PostedFile.InputStream.Length];
FileUpload1.PostedFile.InputStream.Read(byteArray, 0, byteArray.Length);

///加密
var list = encode.TransformFinalBlock(byteArray, 0, byteArray.Length).ToList();

//写入加密KEY
for (int i = 31; i >= 0; i--)
{
//加入到集合
list.Insert(0, ByteKey[i]);
}

Response.Write(guid);

//转换成Array
byteArray = list.ToArray();

System.IO.File.WriteAllBytes(Server.MapPath("./temp可删除/") + System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName) + ".Encode", byteArray);

Response.Write("<br/>" + System.Text.UTF8Encoding.UTF8.GetString(byteArray.Take(32).ToArray()));
}

/// <summary>
/// 解密数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button2_Click(object sender, EventArgs e)
{

//写新解密文
using (System.IO.FileStream writeFile = System.IO.File.Create(Server.MapPath("./temp可删除/") + System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName) + ".Dencode"))
{

//读取加密码key
using (System.IO.Stream sr = FileUpload2.PostedFile.InputStream)
{

System.Security.Cryptography.AesManaged Aes = new System.Security.Cryptography.AesManaged();
byte[] ByteKey = new byte[32];
sr.Read(ByteKey, 0, ByteKey.Length);
//读取KEY
using (System.Security.Cryptography.ICryptoTransform dencode = Aes.CreateDecryptor(ByteKey, ByteKey.Take(16).ToArray()))
{
//开始解密一次性
//byte[] result = dencode.TransformFinalBlock(reads, 0, len);
//使用DES流解密
using (System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(writeFile, dencode, System.Security.Cryptography.CryptoStreamMode.Write))
{

while (sr.CanRead)
{

byte[] reads = new byte[2048];
//读取的有效长度
int len = sr.Read(reads, 0, reads.Length);
if (len == 0) { break; }
cs.Write(reads, 0, len);

}
cs.Close();
}

}

sr.Close();
}

writeFile.Close();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐