求一个用C#.NET写的AES加密程序

linq-w 2010-05-28 12:10:44
用AES算法加密解密一个文件,以前写的只能加密,解密好像不行,求大神来帮忙
...全文
222 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
GooKit 2011-04-30
  • 打赏
  • 举报
回复
汗,CSDN的内涵让人担忧……
这样的问题我也过好久了,
均无有效解决……
实在悲剧……
mayonglong 2010-05-28
  • 打赏
  • 举报
回复
clxiao 2010-05-28
  • 打赏
  • 举报
回复
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptStr">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptStr, string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptStr);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptStr;
}
}

/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptStr">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptStr, string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptStr);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return decryptStr;
}
}

/// <summary>
/// DES加密文件
/// </summary>
/// <param name="inFilePath">待加密文件</param>
/// <param name="outFilePath">加密后的文件</param>
/// <param name="encryptKey">加密密钥</param>
/// <returns></returns>
public static bool EncryptDES(string inFilePath, string outFilePath, string encryptKey)
{
byte[] rgbIV = Keys;
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
//读入的流
FileStream inFs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
//待写的流
FileStream outFs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
outFs.SetLength(0);
//创建一个变量来帮助读写
byte[] byteIn = new byte[100]; //临时存放读入的流
long readLen = 0; //读入流的长度
long totalLen = inFs.Length; //总共读入流的长度
int everyLen; //每次读入流动长度
//读入InFs,加密后写入OutFs
DES des = new DESCryptoServiceProvider();
CryptoStream encStream = new CryptoStream(outFs, des.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
while (readLen < totalLen)
{
everyLen = inFs.Read(byteIn, 0, 100);
encStream.Write(byteIn, 0, everyLen);
readLen = readLen + everyLen;
}
encStream.Close();
outFs.Close();
inFs.Close();
return true;//加密成功
}
catch
{
return false;//加密失败
}
}


/// <summary>
/// DES解密文件
/// </summary>
/// <param name="inFilePath">待解密文件</param>
/// <param name="outFilePath">待加密文件</param>
/// <param name="decryptKey">解密密钥</param>
/// <returns></returns>
public static bool DecryptDES(string inFilePath, string outFilePath, string decryptKey)
{
byte[] rgbIV = Keys;
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 8));
//读入的流
FileStream inFs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
//待写的流
FileStream outFs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
outFs.SetLength(0);
//创建一个变量来帮助读写
byte[] byteIn = new byte[100]; //临时存放读入的流
long readLen = 0; //读入流的长度
long totalLen = inFs.Length; //总共读入流的长度
int everyLen; //每次读入流动长度
//读入InFs,解密后写入OutFs
DES des = new DESCryptoServiceProvider();
CryptoStream encStream = new CryptoStream(outFs, des.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
while (readLen < totalLen)
{
everyLen = inFs.Read(byteIn, 0, 100);
encStream.Write(byteIn, 0, everyLen);
readLen = readLen + everyLen;
}
encStream.Close();
outFs.Close();
inFs.Close();
return true;//解密成功
}
catch
{
return false;//解密失败
}
}
dopsop110 2010-05-28
  • 打赏
  • 举报
回复
不懂
帮顶
蹭分
linq-w 2010-05-28
  • 打赏
  • 举报
回复
不是RSA,是AES啊,大哥
changjin642 2010-05-28
  • 打赏
  • 举报
回复
帮顶。
xiongxyt2 2010-05-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100527/16/789d8315-5e7d-4f1b-a8aa-d447864d4c63.html
JEREMY_PAN 2010-05-28
  • 打赏
  • 举报
回复
现在的水平还看不懂上面的代码
itrefer 2010-05-28
  • 打赏
  • 举报
回复
wuyq11 2010-05-28
  • 打赏
  • 举报
回复
public static string Encrypt(string strEncrypt, string strKey)
{
try
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strKey, "md5"));
byte[] strEncryptArray = UTF8Encoding.UTF8.GetBytes(strEncrypt);
byte[] resultArray = null;

using (RijndaelManaged rDel = new RijndaelManaged())
{
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;

ICryptoTransform cTransform = rDel.CreateEncryptor();

resultArray = cTransform.TransformFinalBlock(strEncryptArray, 0, strEncryptArray.Length);

}
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
catch
{
return null;
}
}

public static string Decrypt(string strDecrypt, string strKey)
{
try
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strKey, "md5"));
byte[] strDecryptArray = Convert.FromBase64String(strDecrypt);
byte[] resultArray = null;

using (RijndaelManaged rDel = new RijndaelManaged())
{
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;

ICryptoTransform cTransform = rDel.CreateDecryptor();
resultArray = cTransform.TransformFinalBlock(strDecryptArray, 0, strDecryptArray.Length);

}

return UTF8Encoding.UTF8.GetString(resultArray);
}
catch
{

return null;
}
}
Pro_ah 2010-05-28
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 加密解密
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void _EncodeButton_Click(object sender, EventArgs e)
{
_EncodedBox.Text = EncodeString(_SourceBox.Text);
}

private void _DecodeButton_Click(object sender, EventArgs e)
{
_SourceBox.Text = DecodeString(_EncodedBox.Text);
}
//编码输入的字符串
private static string EncodeString(string source)
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(source);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] ^= (byte)(i & 0x0095);
}
return Convert.ToBase64String(bytes);
}
//解码传入的字符串
private static string DecodeString(string source)
{
byte[] bytes = Convert.FromBase64String(source);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] ^= (byte)(i & 0x0095);
}
return System.Text.Encoding.UTF8.GetString(bytes);
}
}
}


仅供参考
nolgbbenny 2010-05-28
  • 打赏
  • 举报
回复
学习学习
xiongxyt2 2010-05-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100527/21/228be16b-758b-4f85-a5d5-80a4ba2e12ff.html
linq-w 2010-05-28
  • 打赏
  • 举报
回复
顶起~

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧