|
|
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); }
}}
|