174 lines
5.8 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|