using System;
using System.Text;
using System.IO;
using System.Security.Cryptography;
namespace DataexchangeServer
{
///
/// ×Ö·û´®¼ÓÃܽâÃÜÀà
///
public sealed class StringSecurity
{
private StringSecurity() { }
#region SHA1 ¼ÓÃÜ
///
/// ʹÓÃSHA1¼ÓÃÜ×Ö·û´®¡£
///
/// ÊäÈë×Ö·û´®¡£
/// ¼ÓÃܺóµÄ×Ö·û´®¡££¨40¸ö×Ö·û£©
public static string StringToSHA1Hash(string inputString)
{
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
byte[] encryptedBytes = sha1.ComputeHash(Encoding.ASCII.GetBytes(inputString));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < encryptedBytes.Length; i++)
{
sb.AppendFormat("{0:x2}", encryptedBytes[i]);
}
return sb.ToString();
}
#endregion
#region DES ¼ÓÃÜ/½âÃÜ
private static byte[] key = ASCIIEncoding.ASCII.GetBytes("uiertysd");
private static byte[] iv = ASCIIEncoding.ASCII.GetBytes("99008855");
///
/// DES¼ÓÃÜ¡£
///
/// ÊäÈë×Ö·û´®¡£
/// ¼ÓÃܺóµÄ×Ö·û´®¡£
public static string DESEncrypt(string inputString)
{
MemoryStream ms = null;
CryptoStream cs = null;
StreamWriter sw = null;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
try
{
ms = new MemoryStream();
cs = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);
sw = new StreamWriter(cs);
sw.Write(inputString);
sw.Flush();
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
finally
{
if (sw != null) sw.Close();
if (cs != null) cs.Close();
if (ms != null) ms.Close();
}
}
///
/// DES½âÃÜ¡£
///
/// ÊäÈë×Ö·û´®¡£
/// ½âÃܺóµÄ×Ö·û´®¡£
public static string DESDecrypt(string inputString)
{
MemoryStream ms = null;
CryptoStream cs = null;
StreamReader sr = null;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
try
{
ms = new MemoryStream(Convert.FromBase64String(inputString));
cs = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read);
sr = new StreamReader(cs);
return sr.ReadToEnd();
}
finally
{
if (sr != null) sr.Close();
if (cs != null) cs.Close();
if (ms != null) ms.Close();
}
}
#endregion
}
///
/// °²È«º¯Êý¸¨ÖúÀà¡£
///
public class SecurityHelper
{
#region ¶ÔÍ⹫²¼µÄ¼ÓÃÜÂëËã·¨
///
/// AES¼ÓÃÜÂëµÄKey
///
private static readonly string EncryptKey = "1234567891234569123456789123";
///
/// ¼ÓÃÜ
///
/// ÐèÒª¼ÓÃܵÄ×Ö·û´®¡£
/// ·µ»Ø¼ÓÃܺóµÄ×Ö·û´®£¬Èç¹û¼ÓÃÜÂëʧ°Ü·µ»Ø¿Õ¡£
public static string Encrypt(string strPassword)
{
string Password = AESEncrypt(strPassword, EncryptKey);
return strPassword == Password ? strPassword : Password;
}
///
/// ½âÃÜ
///
/// ¼ÓÃÜÂë×Ö·û´®
/// ·µ»Ø½âÃܺóµÄ×Ö·û´®£¬Èç¹û½âÃÜÂëʧ°Ü·µ»Ø¿Õ¡£
public static string Decrypt(string strPassword)
{
string Password = AESDecrypt(strPassword, EncryptKey);
return strPassword == Password ? strPassword : Password;
}
#endregion
//ĬÈÏDESÃÜÔ¿ÏòÁ¿
//private static byte[] DES_IV = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
//ĬÈÏAESÃÜÔ¿ÏòÁ¿
private static byte[] AES_IV =
{
0x41, 0x72, 0x65, 0x79, 0x6F, 0x75, 0x6D, 0x79, 0x53, 0x6E, 0x6F, 0x77, 0x6D,
0x61, 0x6E, 0x3F
};
//private const string RSASign_HashAlgorithmName = "MD5";
//private const string RSAEncryptXml_KeyName = "key";
#region Hashcode
///
/// MD5º¯Êý¡£
///
/// Ôʼ×Ö·û´®¡£
/// MD5½á¹û¡£
public static string MD5(string str)
{
byte[] b = Encoding.UTF8.GetBytes(str);
byte[] hash = MD5(b);
string ret = "";
for (int i = 0; i < hash.Length; i++)
ret += hash[i].ToString("x").PadLeft(2, '0');
return ret;
}
///
/// MD5º¯Êý¡£
///
/// ÔʼÊý¾ÝÁ÷¡£
/// MD5½á¹û¡£
public static byte[] MD5(byte[] data)
{
return new MD5CryptoServiceProvider().ComputeHash(data);
}
///
/// SHA256º¯Êý¡£
///
/// /// Ôʼ×Ö·û´®¡£
/// SHA256½á¹û¡£
public static string SHA256(string str)
{
byte[] SHA256Data = Encoding.UTF8.GetBytes(str);
return Convert.ToBase64String(SHA256(SHA256Data)); //·µ»Ø³¤¶ÈΪ44×Ö½ÚµÄ×Ö·û´®
}
///
/// SHA256º¯Êý¡£
///
/// /// ÔʼÊý¾ÝÁ÷¡£
/// SHA256½á¹û¡£
public static byte[] SHA256(byte[] data)
{
SHA256Managed Sha256 = new SHA256Managed();
return Sha256.ComputeHash(data);
}
#endregion
#region AES¶Ô³Æ¼ÓÃܽâÃÜ
///
/// AES¼ÓÃÜ¡£
///
/// ´ý¼ÓÃܵÄ×Ö·û´®¡£
/// ¼ÓÃÜÃÜÔ¿,ÒªÇóΪ32λ¡£
/// ¼ÓÃܳɹ¦·µ»Ø¼ÓÃܺóµÄ×Ö·û´®,ʧ°Ü·µ»ØÔ´´®¡£
private static string AESEncrypt(string encryptString, string encryptKey)
{
try
{
byte[] inputData = Encoding.UTF8.GetBytes(encryptString);
return Convert.ToBase64String(AESEncrypt(inputData, encryptKey));
}
catch
{
return encryptString;
}
}
///
/// AES¼ÓÃÜ¡£
///
/// ´ý¼ÓÃܵÄÊý¾Ý¡£
/// ¼ÓÃÜÃÜÔ¿,ÒªÇóΪ32λ¡£
/// ¼ÓÃܳɹ¦·µ»Ø¼ÓÃܺóµÄÊý¾Ý,ʧ°Ü·µ»Ø¿Õ×Ö·û´®¡£
private static byte[] AESEncrypt(byte[] data, string encryptKey)
{
try
{
encryptKey = StringHelper.GetSubString(encryptKey, 32, "");
encryptKey = encryptKey.PadRight(32, ' ');
RijndaelManaged rijndaelProvider = new RijndaelManaged();
rijndaelProvider.Key = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 32));
rijndaelProvider.IV = AES_IV;
ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor();
byte[] inputData = data;
byte[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);
return encryptedData;
}
catch (Exception e)
{
//Instance.WriteLog(e.Message, false);
return data;
}
}
///
/// AES½âÃÜ¡£
///
/// ´ý½âÃܵÄ×Ö·û´®¡£
/// ½âÃÜÃÜÔ¿,ÒªÇóΪ32λ,ºÍ¼ÓÃÜÃÜÔ¿Ïàͬ¡£
/// ½âÃܳɹ¦·µ»Ø½âÃܺóµÄ×Ö·û´®,ʧ°Ü·µ»Ø¿Õ×Ö·û´®¡£
private static string AESDecrypt(string decryptString, string decryptKey)
{
try
{
byte[] inputData = Convert.FromBase64String(decryptString);
return Encoding.UTF8.GetString(AESDecrypt(inputData, decryptKey));
}
catch
{
return decryptString;
}
}
///
/// AES½âÃÜ¡£
///
/// ´ý½âÃܵÄÊý¾Ý¡£
/// ½âÃÜÃÜÔ¿,ÒªÇóΪ32λ,ºÍ¼ÓÃÜÃÜÔ¿Ïàͬ¡£
/// ½âÃܳɹ¦·µ»Ø½âÃܺóµÄÊý¾ÝÁ÷,ʧ°Ü·µ»ØÔ´Êý¾Ý¡£
private static byte[] AESDecrypt(byte[] data, string decryptKey)
{
try
{
decryptKey = StringHelper.GetSubString(decryptKey, 32, "");
decryptKey = decryptKey.PadRight(32, ' ');
RijndaelManaged rijndaelProvider = new RijndaelManaged();
rijndaelProvider.Key = Encoding.UTF8.GetBytes(decryptKey);
rijndaelProvider.IV = AES_IV;
ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor();
byte[] inputData = data;
byte[] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);
return decryptedData;
}
catch
{
return data;
}
}
#endregion
}
}