using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace NXWMS.Client.Code.Security
{
///
/// 加密算法类
///
public static class SecurityCryptography
{
#region Base64加密解密
///
/// Base64加密
///
/// 需要加密的字符串
///
public static string Base64Encrypt(string input)
{
return Base64Encrypt(input, new UTF8Encoding());
}
///
/// Base64加密
///
/// 需要加密的字符串
/// 字符编码
///
public static string Base64Encrypt(string input, Encoding encode)
{
return Convert.ToBase64String(encode.GetBytes(input));
}
///
/// Base64解密
///
/// 需要解密的字符串
///
public static string Base64Decrypt(string input)
{
return Base64Decrypt(input, new UTF8Encoding());
}
///
/// Base64解密
///
/// 需要解密的字符串
/// 字符的编码
///
public static string Base64Decrypt(string input, Encoding encode)
{
return encode.GetString(Convert.FromBase64String(input));
}
#endregion
#region MD5 HASH算法
///
/// MD5 HASH算法
///
///
///
public static string GetMd5Hash(string input)
{
if (input == null)
{
return null;
}
MD5 md5Hash = MD5.Create();
// 将输入字符串转换为字节数组并计算哈希数据
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
// 创建一个 Stringbuilder 来收集字节并创建字符串
StringBuilder sBuilder = new StringBuilder();
// 循环遍历哈希数据的每一个字节并格式化为十六进制字符串
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
// 返回十六进制字符串
return sBuilder.ToString();
}
#endregion
#region SHA1加密的字符串
///
/// SHA1加密的字符串
///
///
///
public static string GetSHA1(String input)
{
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
byte[] str1 = Encoding.UTF8.GetBytes(input);
byte[] str2 = sha1.ComputeHash(str1);
sha1.Clear();
(sha1 as IDisposable).Dispose();
return Convert.ToBase64String(str2);
}
#endregion
#region DES加密
///
/// DES加密
///
/// 加密数据
/// 8位字符的密钥字符串
/// 8位字符的初始化向量字符串
///
public static string DESEncrypt(string data, string key = "thuman..", string iv = "thuman..")
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
int i = cryptoProvider.KeySize;
MemoryStream ms = new MemoryStream();
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cst);
sw.Write(data);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
#endregion
#region DES解密
///
/// DES解密
///
/// 解密数据
/// 8位字符的密钥字符串(需要和加密时相同)
/// 8位字符的初始化向量字符串(需要和加密时相同)
///
public static string DESDecrypt(string data, string key = "thuman..", string iv = "thuman..")
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
byte[] byEnc;
try
{
byEnc = Convert.FromBase64String(data);
}
catch
{
return null;
}
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(byEnc);
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cst);
return sr.ReadToEnd();
}
#endregion
}
}