110,499
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
public static class SecurityHelper
{
/// <summary>
/// 获取32位长度的Md5摘要
/// </summary>
/// <param name="inputStr"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string GetMD5_32(this string inputStr, Encoding encoding = null)
{
RefEncoding(ref encoding);
byte[] data = GetMD5(inputStr, encoding);
StringBuilder tmp = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
tmp.Append(data[i].ToString("x2"));
}
return tmp.ToString();
}
private static byte[] GetMD5(string inputStr, Encoding encoding)
{
using (MD5 md5Hash = MD5.Create())
{
return md5Hash.ComputeHash(encoding.GetBytes(inputStr));
}
}
private static void RefEncoding(ref Encoding encoding)
{
if (encoding == null)
{
encoding = Encoding.Default;
}
}
/// <summary>
/// 解密
/// </summary>
/// <param name="encrypted">加密过的字符串</param>
/// <param name="key">加密key</param>
/// <param name="encoding">编码</param>
/// <returns>解密后的字符串</returns>
public static string DecryptString(this string encrypted, string key, Encoding encoding = null)
{
RefEncoding(ref encoding);
byte[] buff = Convert.FromBase64String(encrypted);
//byte[] buff = encoding.GetBytes(encrypted);
var provider = GetTripleDESCryptoServiceProvider(key, encoding);
return encoding.GetString(provider.CreateDecryptor().TransformFinalBlock(buff, 0, buff.Length));
}
private static TripleDESCryptoServiceProvider GetTripleDESCryptoServiceProvider(string key, Encoding encoding)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = GetMD5(key, encoding);
des.Mode = CipherMode.ECB;
return des;
}
/// <summary>
/// 加密
/// </summary>
/// <param name="original">待加密字符串</param>
/// <param name="key">加密key</param>
/// <param name="encoding">编码</param>
/// <returns>加密后的字符串</returns>
public static string EncryptString(this string original, string key, Encoding encoding = null)
{
RefEncoding(ref encoding);
byte[] buff = encoding.GetBytes(original);
var provider = GetTripleDESCryptoServiceProvider(key, encoding);
return Convert.ToBase64String(provider.CreateEncryptor().TransformFinalBlock(buff, 0, buff.Length));
//return encoding.GetString(provider.CreateEncryptor().TransformFinalBlock(buff, 0, buff.Length));
}
}