You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.8 KiB
146 lines
4.8 KiB
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Security.Cryptography;
|
|
using System.IO;
|
|
using Org.BouncyCastle.Crypto.Parameters;
|
|
using Org.BouncyCastle.Crypto;
|
|
using Org.BouncyCastle.Security;
|
|
using Org.BouncyCastle.Utilities;
|
|
|
|
namespace Shentun.Peis
|
|
{
|
|
public class AesHelper
|
|
{
|
|
private static readonly byte[] Key = Encoding.UTF8.GetBytes("1234567812345678"); // 16字节密钥
|
|
private static readonly byte[] Iv = Encoding.UTF8.GetBytes("1234567812345678"); // 16字节初始化向量
|
|
|
|
/// <summary>
|
|
/// MD5加密
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
public static string GetMD5Hash(string input)
|
|
{
|
|
using (MD5 md5 = MD5.Create())
|
|
{
|
|
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
|
|
byte[] hashBytes = md5.ComputeHash(inputBytes);
|
|
|
|
// Convert byte array to a hexadecimal string
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < hashBytes.Length; i++)
|
|
{
|
|
sb.Append(hashBytes[i].ToString("x2"));
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// MD5加密
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
public static string GetMD5Hash2(byte[] input)
|
|
{
|
|
using (MD5 md5 = MD5.Create())
|
|
{
|
|
//byte[] inputBytes = Encoding.UTF8.GetBytes(input);
|
|
byte[] hashBytes = md5.ComputeHash(input);
|
|
|
|
// Convert byte array to a hexadecimal string
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < hashBytes.Length; i++)
|
|
{
|
|
sb.Append(hashBytes[i].ToString("X2"));
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解密
|
|
/// </summary>
|
|
/// <param name="strinput"></param>
|
|
/// <param name="strkey"></param>
|
|
/// <returns></returns>
|
|
public static string AESDecrypt(string strinput, string strkey)
|
|
{
|
|
try
|
|
{
|
|
//string dummyData = strinput.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+").Replace("_", "/").Replace("-", "+");
|
|
//if (dummyData.Length % 4 > 0)
|
|
//{
|
|
// dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
|
|
//}
|
|
byte[] inputArray = Convert.FromBase64String(strinput);
|
|
byte[] key = Encoding.UTF8.GetBytes(strkey);
|
|
|
|
IBufferedCipher cipher = CipherUtilities.GetCipher("AES/ECB/PKCS5Padding");
|
|
|
|
cipher.Init(false, AesKey(strkey));
|
|
// cipher.Init(false, new ParametersWithIV(new DesParameters(key), key)); 带IV向量的算法可以用到。
|
|
byte[] rv = new byte[cipher.GetOutputSize(inputArray.Length)];
|
|
int tam = cipher.ProcessBytes(inputArray, 0, inputArray.Length, rv, 0);
|
|
cipher.DoFinal(rv, tam);
|
|
return Encoding.UTF8.GetString(rv);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加密
|
|
/// </summary>
|
|
/// <param name="inputArray"></param>
|
|
/// <param name="strkey"></param>
|
|
/// <returns></returns>
|
|
public static byte[] AESEncrypt(byte[] inputArray, string strkey)
|
|
{
|
|
try
|
|
{
|
|
//byte[] inputArray = Encoding.UTF8.GetBytes(strinput);
|
|
byte[] key = Encoding.UTF8.GetBytes(strkey);
|
|
|
|
IBufferedCipher cipher = CipherUtilities.GetCipher("AES/ECB/PKCS5Padding");
|
|
//cipher.Init(true, new ParametersWithIV(new DesParameters(key), key));
|
|
cipher.Init(true, AesKey(strkey));
|
|
byte[] rv = new byte[cipher.GetOutputSize(inputArray.Length)];
|
|
int tam = cipher.ProcessBytes(inputArray, 0, inputArray.Length, rv, 0);
|
|
cipher.DoFinal(rv, tam);
|
|
//return Convert.ToBase64String(rv);
|
|
return rv;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
public static KeyParameter AesKey(String key)
|
|
{
|
|
byte[] bs = Encoding.Default.GetBytes(key);
|
|
if (bs.Length != 16)
|
|
{
|
|
bs = Arrays.CopyOf(bs, 16);// 处理数组长度为16(不足16位,不空;超过16位取前16位)
|
|
}
|
|
return new KeyParameter(bs);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|