using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Xml;
using System.Security.Cryptography.Xml;
namespace xue
{
/// <summary>
/// AES Encode & Decode
/// </summary>
public class CryptUtility
{
public CryptUtility()
{
}
/// <summary>
/// AES加密
/// </summary>
/// <param name="Data">被加密的明文</param>
/// <param name="Key">密钥</param>
/// <param name="Vector">向量</param>
/// <returns>密文</returns>
public static Byte[] AESEncrypt(Byte[] Data, String Key, String Vector)
{
Byte[] bKey = new Byte[32];
Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
Byte[] bVector = new Byte[16];
Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
Byte[] Cryptograph = null; // 加密后的密文
Rijndael Aes = Rijndael.Create();
try
{
// 开辟一块内存流
using (MemoryStream Memory = new MemoryStream())
{
// 把内存流对象包装成加密流对象
using (CryptoStream Encryptor = new CryptoStream(Memory,
Aes.CreateEncryptor(bKey, bVector),
CryptoStreamMode.Write))
{
// 明文数据写入加密流
Encryptor.Write(Data, 0, Data.Length);
Encryptor.FlushFinalBlock();
Cryptograph = Memory.ToArray();
}
}
}
catch
{
Cryptograph = null;
}
return Cryptograph;
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="Data">被解密的密文</param>
/// <param name="Key">密钥</param>
/// <param name="Vector">向量</param>
/// <returns>明文</returns>
public static Byte[] AESDecrypt(Byte[] Data, String Key, String Vector)
{
Byte[] bKey = new Byte[32];
Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
Byte[] bVector = new Byte[16];
Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
Byte[] original = null; // 解密后的明文
Rijndael Aes = Rijndael.Create();
try
{
// 开辟一块内存流,存储密文
using (MemoryStream Memory = new MemoryStream(Data))
{
// 把内存流对象包装成加密流对象
using (CryptoStream Decryptor = new CryptoStream(Memory,
Aes.CreateDecryptor(bKey, bVector),
CryptoStreamMode.Read))
{
// 明文存储区
using (MemoryStream originalMemory = new MemoryStream())
{
Byte[] Buffer = new Byte[1024];
Int32 readBytes = 0;
while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
{
originalMemory.Write(Buffer, 0, readBytes);
}
original = originalMemory.ToArray();
}
}
}
}
catch
{
original = null;
}
return original;
}
//public String AESEncrypt()
//{
// Rijndael aes = Rijndael.Create();
// aes.GenerateIV();
// aes.GenerateKey();
// aes.CreateEncryptor();
//}
public String MD5Encrypt()
{
MD5 m = MD5.Create();
return "";
}
public String GetMD5Hash(String file)
{
FileStream fs = new FileStream(file, FileMode.Open);
MD5 m = MD5.Create();
try
{
System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
return BitConverter.ToString(m.ComputeHash(fs)).Replace('-', new char());
}
catch (Exception ex)
{
throw ex;
}
finally
{
fs.Close();
}
}
//加密
public string desencode(string encodestring)
{
byte[] input = System.Text.Encoding.Unicode.GetBytes(encodestring);
MemoryStream ms = new MemoryStream();
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform ct = des.CreateEncryptor(new byte[] { 111, 112, 113, 114,115,116, 117, 118 }, new byte[] { 111, 112, 113, 114, 115, 116, 117, 118 });
CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(input, 0, input.Length);
cs.Clear();
cs.Close();
ms.Close();
return System.Text.Encoding.Unicode.GetString(ms.ToArray());
}
//解密
public string desdecode(string decodestring)
{
byte[] input = System.Text.Encoding.Unicode.GetBytes(decodestring);
MemoryStream ms = new MemoryStream(input);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform ct = des.CreateDecryptor(new byte[] { 111, 112, 113, 114, 115, 116, 117, 118 }, new byte[] { 111, 112, 113, 114, 115, 116, 117, 118 });
CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Read);
byte[] bb = new byte[input.Length];
cs.Read(bb, 0, input.Length);
cs.Clear();
cs.Close();
ms.Close();
return System.Text.Encoding.Unicode.GetString(bb);
}
public void EncryptXML()
{
RijndaelManaged key = null;
try
{
key = new RijndaelManaged();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load("DataMana.exe.config");
XmlElement el = xmlDoc.GetElementsByTagName("add")[0] as XmlElement;
EncryptedXml eXml = new EncryptedXml();
byte[] encrypted = eXml.EncryptData(el, key, false);
EncryptedData endata = new EncryptedData();
endata.Type = EncryptedXml.XmlEncElementUrl;
}
catch (Exception ex)
{
}
}
}
}