首先,引入
using System.Security.Cryptography;
/// <summary>
/// AES、DES加解密工具类
/// </summary>
public class EncryptUtil
{
private static readonly string AESKEY = "GHYU80DV3465QSFG";//16或者32位
//private static readonly string DESKEY = ConfigurationManager.AppSettings["DESKEY"].Trim();
private static readonly string DESKEY = "PORG56JK";//8位
/// <summary>
/// AES加密
/// </summary>
/// <param name="data">要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string EncryptAES(string data)
{
try
{
RijndaelManaged aes = new RijndaelManaged();
byte[] bData = UTF8Encoding.UTF8.GetBytes(data);
aes.Key = UTF8Encoding.UTF8.GetBytes(AESKEY);
aes.IV = UTF8Encoding.UTF8.GetBytes(AESKEY);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform iCryptoTransform = aes.CreateEncryptor();
byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);
// return Convert.ToBase64String(bResult); //返回base64加密;
return ByteToHex(bResult); //返回十六进制数据;
}
catch
{
throw;
}
}
/// <summary>
/// AES加密
/// </summary>
/// <param name="data">要加密的字符串</param>
/// <param name="sKey">密钥串(16位或32位)</param>
/// <returns>加密后的字符串</returns>
public static string EncryptAES(string data, string sKey)
{
try
{
RijndaelManaged aes = new RijndaelManaged();
byte[] bData = UTF8Encoding.UTF8.GetBytes(data);
aes.Key = UTF8Encoding.UTF8.GetBytes(sKey);
aes.IV = UTF8Encoding.UTF8.GetBytes(sKey);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform iCryptoTransform = aes.CreateEncryptor();
byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);
// return Convert.ToBase64String(bResult); //返回base64加密;
return ByteToHex(bResult); //返回十六进制数据;
}
catch
{
throw;
}
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="data">要解密的字符串</param>
/// <returns>解密后的字符串</returns>
public static string DecryptAES(string data)
{
try
{
RijndaelManaged aes = new RijndaelManaged();
//byte[] bData = Convert.FromBase64String(data); //解密base64;
byte[] bData = HexToByte(data); //16进制to byte[];
aes.Key = UTF8Encoding.UTF8.GetBytes(AESKEY);
aes.IV = UTF8Encoding.UTF8.GetBytes(AESKEY);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform iCryptoTransform = aes.CreateDecryptor();
byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);
return Encoding.UTF8.GetString(bResult);
}
catch
{
throw;
}
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="data">要解密的字符串</param>
/// <param name="sKey">密钥串(16位或32位字符串)</param>
/// <returns>解密后的字符串</returns>
public static string DecryptAES(string data, string sKey)
{
try
{
RijndaelManaged aes = new RijndaelManaged();
//byte[] bData = Convert.FromBase64String(data); //解密base64;
byte[] bData = HexToByte(data); //16进制to byte[];
aes.Key = UTF8Encoding.UTF8.GetBytes(sKey);
aes.IV = UTF8Encoding.UTF8.GetBytes(sKey);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform iCryptoTransform = aes.CreateDecryptor();
byte[] bResult = iCryptoTransform.TransformFinalBlock(bData, 0, bData.Length);
return Encoding.UTF8.GetString(bResult);
}
catch
{
throw;
}
}
/// <summary>
/// DES加密
/// </summary>
/// <param name="data">要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string EncryptDES(string data)
{
DES des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Key = Encoding.UTF8.GetBytes(DESKEY);
des.IV = Encoding.UTF8.GetBytes(DESKEY);
byte[] bytes = Encoding.UTF8.GetBytes(data);
byte[] resultBytes = des.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length);
//return Convert.ToBase64String(resultBytes); //密文以base64返回;(可根据实际需要返回16进制数据;)
return ByteToHex(resultBytes);//十六位
}
/// <summary>
/// DES加密
/// </summary>
/// <param name="data">要加密的字符串</param>
/// <param name="key">密钥串(8位字符串)</param>
/// <returns>加密后的字符串</returns>
public static string EncryptDES(string data, string key)
{
DES des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Key = Encoding.UTF8.GetBytes(key);
des.IV = Encoding.UTF8.GetBytes(key);
byte[] bytes = Encoding.UTF8.GetBytes(data);
byte[] resultBytes = des.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length);
//return Convert.ToBase64String(resultBytes); //密文以base64返回;(可根据实际需要返回16进制数据;)
return ByteToHex(resultBytes);//十六位
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="data">要解密的字符串</param>
/// <param name="key">密钥串(8位字符串)</param>
/// <returns>解密后的字符串</returns>
public static string DecryptDES(string data)
{
DES des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Key = Encoding.UTF8.GetBytes(DESKEY);
des.IV = Encoding.UTF8.GetBytes(DESKEY);
//byte[] bytes = Convert.FromBase64String(data);
byte[] bytes = HexToByte(data);
byte[] resultBytes = des.CreateDecryptor().TransformFinalBlock(bytes, 0, bytes.Length);
return Encoding.UTF8.GetString(resultBytes);
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="data">要解密的字符串</param>
/// <param name="key">密钥串(8位字符串)</param>
/// <returns>解密后的字符串</returns>
public static string DecryptDES(string data, string key)
{
DES des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Key = Encoding.UTF8.GetBytes(key);
des.IV = Encoding.UTF8.GetBytes(key);
//byte[] bytes = Convert.FromBase64String(data);
byte[] bytes = HexToByte(data);
byte[] resultBytes = des.CreateDecryptor().TransformFinalBlock(bytes, 0, bytes.Length);
return Encoding.UTF8.GetString(resultBytes);
}
// method to convert hex string into a byte array
private static byte[] HexToByte(string data)
{
data = data.Replace(" ", "");
byte[] comBuffer = new byte[data.Length / 2];
for (int i = 0; i < data.Length; i += 2)
comBuffer[i / 2] = (byte)Convert.ToByte(data.Substring(i, 2), 16);
return comBuffer;
}
// method to convert a byte array into a hex string
private static string ByteToHex(byte[] comByte)
{
StringBuilder builder = new StringBuilder(comByte.Length * 3);
foreach (byte data in comByte)
builder.Append(Convert.ToString(data, 16).PadLeft(2, '0').PadRight(3, ' '));
return builder.ToString().ToUpper().Replace(" ", "");
}
}
分享到:
相关推荐
虽然大多数项目开发很少用到,但真到想用的时候,却发现网上真正可用的资源很少;所以整理了一下,发上来,仅供参考;(DES和天津联通短信网关测试通过;AES和杭州小灵通测试通过;)
后来不得不妥协采用一个变通的方法,就是DES和AES部分用.net来做,再用xmlhttp去取结果。 这样做的结果以后会带来很多麻烦,比如曾多次遇到,客户一在新机器上部署,但忘了安装.net framework,导致接口出错。 后来...
存在一些问题,很多人喜欢罗列每种加密算法的具体实现,假设我们要求实现AES 和Triple DES 加密算 法,的确可以很多地分别给出它们的具体实现。 那我们真的有必要给出每个加密算法的具体实现吗?而且这样的设计不...
ASP_DES_AES_sha256加密解密,对文本信息aes des sha256 加解密方法类
系统对每一个文件都录入独立的密码,在查看详细时会要求输入! 系统可以选择AES或DES进行加密,独立密码使用MD5加密后截取作为密钥! 虽然是以前写的,但是多少有一些参考价值!
/// DES加密字符串 /// /// 待加密的字符串 /// 加密密钥,要求为8位 /// 加密成功返回加密后的字符串,失败返回源串 public static string Encode(string encryptString, string encryptKey) { encryptKey =...
* 关于DES加密中的初始化向量IV: * 对于给定的密钥 k,不使用初始化向量的简单块密码将同一个纯文本输入块加密为 * 同一个密码文本输出块。如果您的纯文本流中有重复块,则您的密码文本流中也会 * 有重复块。...
asp常用的加密函数
AES是美国高级加密标准算法,将在未来几十年里代替DES在各个领域中得到广泛应用,尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。...
算法库集成的算法有:BlowFish,MD5,Secret16,AES、SHA、CRC32、RSA、DES、字符串加/解密、文件加/解密等多种功能强大的算法,可以满足软件开发的各类需求,加密算法库附有详细的函数说明及各类软件调用示例。
Asp与Delphi互通的AES加解密程序源码,AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经...
Ourmsg的数据传输采用了GZIP流压缩和AES 256/192、3DES 192/128位加密算法,使数据传输安全可靠。因此,Ourmsg也适合安全性要求较高的私有网络内安装部署使用。同时,Ourmsg也可部署在互联网上,提供给互联网公众...
算法库集成的算法有:BlowFish,MD5,Secret16,AES、SHA、CRC32、RSA、DES、字符串加/解密、文件加/解密等多种功能强大的算法,可以满足软件开发的各类需求,加密算法库附有详细的函数说明及各类软件调用示例。
对于ASP程序,系统提供MD2,MD4,MD5,MDC2,RipeMD160,SHA,SHA-1,SHA-2 ,base32,base64,AES,BLOWFISH,CAST5,DES,IDEA,RC2,RC4等很多加密算法,提供http、TCP、socket及聊天室等组件