You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
4.5 KiB
C#

3 years ago
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using NETCore.Encrypt;
namespace Common
{
/// <summary>
/// 安全加密解密类
/// </summary>
public class SafeTools
{
/// <summary>
/// HmacSHA256加密
/// </summary>
/// <param name="text"></param>
/// <param name="key"></param>
/// <returns></returns>
public static String HmacSHA256(String text, String key)
{
ASCIIEncoding encoding = new ASCIIEncoding();
Byte[] textBytes = encoding.GetBytes(text);
Byte[] keyBytes = encoding.GetBytes(key);
Byte[] hashBytes;
using (HMACSHA256 hash = new HMACSHA256(keyBytes))
hashBytes = hash.ComputeHash(textBytes);
return BitConverter.ToString(hashBytes).ToLower();
// return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
/// <summary>
/// 将字符串转换成base64格式,使用UTF8字符集
/// </summary>
/// <param name="content">加密内容</param>
/// <returns></returns>
public static string Base64Encode(string content)
{
byte[] bytes = Encoding.UTF8.GetBytes(content);
return Convert.ToBase64String(bytes);
}
/// <summary>
/// 将base64格式转换utf8
/// </summary>
/// <param name="content">解密内容</param>
/// <returns></returns>
public static string Base64Decode(string content)
{
byte[] bytes = Convert.FromBase64String(content);
return Encoding.UTF8.GetString(bytes);
}
/// <summary>
/// SHA-1加密
/// </summary>
/// <param name="Value"></param>
/// <returns></returns>
public static string SHA1(string Value)
{
return EncryptProvider.Sha1(Value);
}
/// <summary>
/// DES对称加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="key">加密密钥,要求为16位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString, string key)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(key);
//用于对称算法的初始化向量(默认值)。
byte[] rgbIV = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
Aes dCSP = Aes.Create();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// DES对称解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="key">解密密钥要求16位</param>
/// <returns></returns>
public static string DecryptDES(string decryptString, string key)
{
try
{
//用于对称算法的初始化向量(默认值)
byte[] Keys = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
byte[] rgbKey = Encoding.UTF8.GetBytes(key);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
Aes DCSP = Aes.Create();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return decryptString;
}
}
}
}