/// <summary>
/// AES加密
/// </summary>
/// <param name="str">要加密字符串</param>
/// <returns>返回加密后字符串</returns>
public static string Encrypt_AES(string str, string Key)
{
//分组加密算法
SymmetricAlgorithm des = Rijndael.Create();
byte[] inputByteArray = Encoding.UTF8.GetBytes(str);//得到需要加密的字节数组
//设置密钥及密钥向量
des.Key = Encoding.UTF8.GetBytes(Key);
des.IV = Encoding.UTF8.GetBytes(Key);
des.Mode = System.Security.Cryptography.CipherMode.CBC;
des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
des.BlockSize = 128; using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(des.Key, des.IV), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
ms.Close();
} return Convert.ToBase64String(ms.ToArray());
} } /// <summary>
/// AES解密
/// </summary>
/// <param name="str">要解密字符串</param>
/// <returns>返回解密后字符串</returns>
public static string Decrypt_AES(string str, string Key)
{
byte[] inputByteArray = Convert.FromBase64String(str); SymmetricAlgorithm des = Rijndael.Create();
des.Key = Encoding.UTF8.GetBytes(Key);
des.BlockSize = 128;
des.IV = Encoding.UTF8.GetBytes(Key);
des.Mode = System.Security.Cryptography.CipherMode.CBC;
des.Padding = System.Security.Cryptography.PaddingMode.PKCS7; using (MemoryStream ms = new MemoryStream(inputByteArray))
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(des.Key, des.IV), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
ms.Close();
} return Encoding.UTF8.GetString(ms.ToArray());
}
}
以上是加密解密方法,对字符串“abc”加密再解密后得到的结果是“abc��zҏ�ZO=>�E[”这是什么情况?查了半天也没解决,请帮忙,谢谢,盼复
/// AES加密
/// </summary>
/// <param name="str">要加密字符串</param>
/// <returns>返回加密后字符串</returns>
public static string Encrypt_AES(string str, string Key)
{
//分组加密算法
SymmetricAlgorithm des = Rijndael.Create();
byte[] inputByteArray = Encoding.UTF8.GetBytes(str);//得到需要加密的字节数组
//设置密钥及密钥向量
des.Key = Encoding.UTF8.GetBytes(Key);
des.IV = Encoding.UTF8.GetBytes(Key);
des.Mode = System.Security.Cryptography.CipherMode.CBC;
des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
des.BlockSize = 128; using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(des.Key, des.IV), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
ms.Close();
} return Convert.ToBase64String(ms.ToArray());
} } /// <summary>
/// AES解密
/// </summary>
/// <param name="str">要解密字符串</param>
/// <returns>返回解密后字符串</returns>
public static string Decrypt_AES(string str, string Key)
{
byte[] inputByteArray = Convert.FromBase64String(str); SymmetricAlgorithm des = Rijndael.Create();
des.Key = Encoding.UTF8.GetBytes(Key);
des.BlockSize = 128;
des.IV = Encoding.UTF8.GetBytes(Key);
des.Mode = System.Security.Cryptography.CipherMode.CBC;
des.Padding = System.Security.Cryptography.PaddingMode.PKCS7; using (MemoryStream ms = new MemoryStream(inputByteArray))
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(des.Key, des.IV), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
ms.Close();
} return Encoding.UTF8.GetString(ms.ToArray());
}
}
以上是加密解密方法,对字符串“abc”加密再解密后得到的结果是“abc��zҏ�ZO=>�E[”这是什么情况?查了半天也没解决,请帮忙,谢谢,盼复
解决方案 »
- 关于本身是htm页面重写路径的问题
- 求一sql语句,如何在数据表的同一个字段一次插入多个信息
- 用C#和xml制作简历
- 请问如何导出多sheet的excel?
- Asp.net 2.0中TableAdapter 使用
- 虽然分数不多但依然散分,这份执着不禁令人敬佩......
- 为什么在Page_PreInit那么早的事件里面就可以设定TextBox属性了?
- [求助]支持asp.net的web服务器 能在xp上使用 无连接数限制
- 使用GridView实现选中项删除,和编辑。
- 如何在showModalDialog()打开的窗口中来刷新下面的窗口?请指教????
- MVC2 如何判断有多少用户已经登录呢?
- 关于asp.net与水晶报表的问题
/// <summary>
/// 加密数据
/// </summary>
/// <param name="input">加密前的字符串</param>
/// <returns>加密后的字符串</returns>
public static string Encrypt(string input, string saltValue, string pwdValue)
{
byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(input);
byte[] salt = System.Text.UTF8Encoding.UTF8.GetBytes(saltValue); // AesManaged - 高级加密标准(AES) 对称算法的管理类
System.Security.Cryptography.AesManaged aes = new System.Security.Cryptography.AesManaged(); // 通过 密码 和 salt 派生密钥
System.Security.Cryptography.Rfc2898DeriveBytes rfc = new System.Security.Cryptography.Rfc2898DeriveBytes(pwdValue, salt); aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;
aes.KeySize = aes.LegalKeySizes[0].MaxSize;
aes.Key = rfc.GetBytes(aes.KeySize / 8);
aes.IV = rfc.GetBytes(aes.BlockSize / 8); // 用当前的 Key 属性和初始化向量 IV 创建对称加密器对象
System.Security.Cryptography.ICryptoTransform encryptTransform = aes.CreateEncryptor(); // 加密后的输出流
System.IO.MemoryStream encryptStream = new System.IO.MemoryStream(); // 将加密后的目标流(encryptStream)与加密转换(encryptTransform)相连接
System.Security.Cryptography.CryptoStream encryptor = new System.Security.Cryptography.CryptoStream
(encryptStream, encryptTransform, System.Security.Cryptography.CryptoStreamMode.Write); // 将一个字节序列写入当前 CryptoStream (完成加密的过程)
encryptor.Write(data, 0, data.Length);
encryptor.Close(); // 将加密后所得到的流转换成字节数组,再用Base64编码将其转换为字符串
string encryptedString = Convert.ToBase64String(encryptStream.ToArray()); return encryptedString;
}
#endregion #region 数据解密(AES)
/// <summary>
/// 解密数据
/// </summary>
/// <param name="input">解密前的字符串</param>
/// <returns>解密后的字符串</returns>
public static string Decrypt(string input, string saltValue, string pwdValue)
{
byte[] encryptBytes = Convert.FromBase64String(input);
byte[] salt = Encoding.UTF8.GetBytes(saltValue); System.Security.Cryptography.AesManaged aes = new System.Security.Cryptography.AesManaged(); System.Security.Cryptography.Rfc2898DeriveBytes rfc = new System.Security.Cryptography.Rfc2898DeriveBytes(pwdValue, salt); aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;
aes.KeySize = aes.LegalKeySizes[0].MaxSize;
aes.Key = rfc.GetBytes(aes.KeySize / 8);
aes.IV = rfc.GetBytes(aes.BlockSize / 8); // 用当前的 Key 属性和初始化向量 IV 创建对称解密器对象
System.Security.Cryptography.ICryptoTransform decryptTransform = aes.CreateDecryptor(); // 解密后的输出流
MemoryStream decryptStream = new MemoryStream(); // 将解密后的目标流(decryptStream)与解密转换(decryptTransform)相连接
System.Security.Cryptography.CryptoStream decryptor = new System.Security.Cryptography.CryptoStream(
decryptStream, decryptTransform, System.Security.Cryptography.CryptoStreamMode.Write); // 将一个字节序列写入当前 CryptoStream (完成解密的过程)
decryptor.Write(encryptBytes, 0, encryptBytes.Length);
decryptor.Close(); // 将解密后所得到的流转换为字符串
byte[] decryptBytes = decryptStream.ToArray();
string decryptedString = UTF8Encoding.UTF8.GetString(decryptBytes, 0, decryptBytes.Length);
return decryptedString;
} #endregion
string ss = AESEncrypt("abc");//RvqaW9wm463knMhW5Vq2Gw==
string tt = AESDecrypt("RvqaW9wm463knMhW5Vq2Gw==");//abc
/// <summary>
/// 获取密钥
/// </summary>
private static string Key
{
get
{
return "abcdef1234567890"; ////必须是16位
}
} //默认密钥向量
private static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; /// <summary>
/// AES加密算法
/// </summary>
/// <param name="plainText">明文字符串</param>
/// <returns>将加密后的密文转换为Base64编码,以便显示</returns>
public static string AESEncrypt(string plainText)
{
//分组加密算法
SymmetricAlgorithm des = Rijndael.Create();
byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组
//设置密钥及密钥向量
des.Key = Encoding.UTF8.GetBytes(Key);
des.IV = _key1;
byte[] cipherBytes = null;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cipherBytes = ms.ToArray();//得到加密后的字节数组
cs.Close();
ms.Close();
}
}
return Convert.ToBase64String(cipherBytes);
} /// <summary>
/// AES解密
/// </summary>
/// <param name="cipherText">密文字符串</param>
/// <returns>返回解密后的明文字符串</returns>
public static string AESDecrypt(string showText)
{
byte[] cipherText = Convert.FromBase64String(showText); SymmetricAlgorithm des = Rijndael.Create();
des.Key = Encoding.UTF8.GetBytes(Key);
des.IV = _key1;
byte[] decryptBytes = new byte[cipherText.Length];
using (MemoryStream ms = new MemoryStream(cipherText))
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read))
{
cs.Read(decryptBytes, 0, decryptBytes.Length);
cs.Close();
ms.Close();
}
}
return Encoding.UTF8.GetString(decryptBytes).Replace("\0", ""); ///将字符串后尾的'\0'去掉
}