ShanxiKnowledgeBase/SXElectricalInspection/Assets/Script/MyFrameworkPure/Tool/EncryptTool.cs

174 lines
5.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
namespace MyFrameworkPure
{
/// <summary>
/// 加密工具类
/// </summary>
public static class EncryptTool
{
/// <summary>
/// 计算字符串的MD5值
/// </summary>
public static string md5(string source)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.UTF8.GetBytes(source);
byte[] md5Data = md5.ComputeHash(data, 0, data.Length);
md5.Clear();
string destString = "";
for (int i = 0; i < md5Data.Length; i++)
{
destString += System.Convert.ToString(md5Data[i], 16).PadLeft(2, '0');
}
destString = destString.PadLeft(32, '0');
return destString;
}
/// <summary>
/// 计算文件的MD5值
/// </summary>
public static string md5file(string file)
{
try
{
FileStream fs = new FileStream(file, FileMode.Open);
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(fs);
fs.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
catch (Exception ex)
{
throw new Exception("md5file() fail, error:" + ex.Message);
}
}
/// <summary>
/// 对称加密与解密
/// </summary>
/// <param equimpentName="encryptStr"></param>
/// <param equimpentName="key"></param>
/// <returns></returns>
public static string Encrypt(string encryptStr, string key = "aescodtuy@#p^sfd")
{
byte[] keyArray = Encoding.UTF8.GetBytes(key);
byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptStr);
RijndaelManaged rDel = new RijndaelManaged
{
Key = keyArray,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
public static string Decrypt(string decryptStr, string key = "aescodtuy@#p^sfd")
{
try
{
byte[] keyArray = Encoding.UTF8.GetBytes(key);
byte[] toEncryptArray = Convert.FromBase64String(decryptStr);
RijndaelManaged rDel = new RijndaelManaged
{
Key = keyArray,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
catch (Exception e)
{
Debug.Log(e.ToString());
}
return string.Empty;
}
/// <summary>
/// base16编码
/// </summary>
/// <param name="str"></param>
/// <param name="autoCode"></param>
/// <returns></returns>
public static string Base16Encrypt(string str, string[] autoCode = null)
{
string innerStr = string.Empty;
StringBuilder strEn = new StringBuilder();
if (autoCode == null || autoCode.Length < 16)
autoCode = new string[] { "a", "2", "B", "g", "E", "5", "f", "6", "C", "8", "o", "9", "Z", "p", "k", "M" };
System.Collections.ArrayList arr = new System.Collections.ArrayList(System.Text.Encoding.Default.GetBytes(str));
for (int i = 0; i < arr.Count; i++)
{
byte data = (byte)arr[i];
int v1 = data >> 4;
strEn.Append(autoCode[v1]);
int v2 = ((data & 0x0f) << 4) >> 4;
strEn.Append(autoCode[v2]);
}
return strEn.ToString();
}
/// <summary>
/// base64编码
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Base64Encode(string str)
{
var bytes = Encoding.UTF8.GetBytes(str);
return Convert.ToBase64String(bytes);
}
/// <summary>
/// base64解码
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Base64Decode(string str)
{
var bytes = Convert.FromBase64String(str);
return Encoding.UTF8.GetString(bytes);
}
/// <summary>
/// sha1加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Sha1(string str)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(str));
var sb = new StringBuilder(hash.Length * 2);
foreach (byte b in hash)
{
// can be "x2" if you want lowercase
sb.Append(b.ToString("X2"));
}
return sb.ToString();
}
}
}
}