using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace Edu.Common.Plugin
{
///
/// 加密方式
///
public enum EncryptMode
{
///
/// 不加密
///
None = 0,
///
/// 16位MD5 -- (常规)
///
MD5_16 = 1,
///
/// 32位MD5
///
MD5_32 = 3
}
///
/// 安全相关辅助类
///
public class SecurityHelper
{
///
/// des 加密密码
///
private static readonly string desKeyStr = "2019040812345678";
#region MD5
///
/// 使用32位MD5加密
///
/// 待加密字符串
///
public static string MD5(string str)
{
return MD5(str, 32);
}
///
/// 使用MD5加密
///
/// 待加密字符串
/// 加密位数 16 位 32 位
///
public static string MD5(string str, int code)
{
if (code == 32)
return MD5(str, 0, 32);
else
return MD5(str, 8, 16); //默认8-16位
}
///
/// 使用MD5加密
///
/// 待加密字符串
/// 截取的开始位置
/// 截取的结束
///
private static string MD5(string str, int startIndex, int endIndex)
{
string sEncrypt = "";
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));
for (int i = 0; i < result.Length; i++)
{
sEncrypt += string.Format("{0:x}", result[i]).PadLeft(2, '0');
}
//16位MD5加密(取32位加密的9~25字符)
return sEncrypt.ToLower().Substring(startIndex, endIndex);
}
///
/// 获取大写的MD5签名结果
///
///
///
public static string MD5EncryptWeChat(string encypStr)
{
var m5 = new MD5CryptoServiceProvider();
byte[] inputBye;
inputBye = Encoding.GetEncoding("utf-8").GetBytes(encypStr);
var outputBye = m5.ComputeHash(inputBye);
var retStr = BitConverter.ToString(outputBye);
retStr = retStr.Replace("-", "").ToUpper();
return retStr;
}
#endregion
#region DES
///
/// Des解密(C#,java通用)
///
///
///
public static string DesDecrypt(string encryptedString)
{
string keyString = desKeyStr.Substring(0, 8);
byte[] btKey = Encoding.UTF8.GetBytes(keyString);
byte[] btIv = Encoding.UTF8.GetBytes("12345678");
var des = new DESCryptoServiceProvider
{
Mode = CipherMode.CBC,//这里指定加密模式为CBC
Padding = PaddingMode.PKCS7,
Key = btKey,
IV = btIv
};
using var ms = new MemoryStream();
byte[] inData = Convert.FromBase64String(encryptedString);
using (var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inData, 0, inData.Length);
cs.FlushFinalBlock();
}
return Encoding.UTF8.GetString(ms.ToArray());
}
///
/// Des加密(C#,java通用)
///
///
///
public static string DesEncrypt(string sourceString)
{
string keyString = desKeyStr.Substring(0, 8);
byte[] btIv = Encoding.UTF8.GetBytes("12345678");
byte[] btKey = Encoding.UTF8.GetBytes(keyString);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
using MemoryStream ms = new MemoryStream();
byte[] inData = Encoding.UTF8.GetBytes(sourceString);
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write))
{
cs.Write(inData, 0, inData.Length);
cs.FlushFinalBlock();
}
return Convert.ToBase64String(ms.ToArray());
}
#endregion
}
}