unity Des和AES 加密解密 📅 发布时间:2026/9/1 12:02:20 👁 浏览次数: DesTool.cs Des工具类脚本using System.IO; using System.Text; using System.Security.Cryptography; using System; public class DesTool { #region 密钥 //private static string key abcd1234; //密钥(长度必须8位以上) #endregion #region DES加密 /// summary /// /// /summary /// param namepToEncrypt加密内容/param /// param namekey密钥/param /// returns/returns public static string EncryptString(string pToEncrypt, string key) { //des加密算法类 DESCryptoServiceProvider des new DESCryptoServiceProvider(); //因为内容包含中文 以utf8子节方式存储 byte[] inputByteArray Encoding.UTF8.GetBytes(pToEncrypt); //对称加密 设置密钥和初始化矢量(ASCII码) des.Key Encoding.UTF8.GetBytes(key); des.IV Encoding.UTF8.GetBytes(key); //创建一个内存流存储加密后的数据 MemoryStream ms new MemoryStream(); //实现一个加密转换流其中包含要将加密后的内容写入的内存流对象用DESCrytoServiceProvider创建的加密器模式为写入数据 CryptoStream cs new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); //将需要加密的字符串通过加密流写入到内存流中 cs.Write(inputByteArray, 0, inputByteArray.Length); //更新内存流存储块然后清除缓存 cs.FlushFinalBlock(); //用来将加密后的数据填充为一个字符串返回 StringBuilder ret new StringBuilder(); foreach (byte b in ms.ToArray()) { ret.AppendFormat({0:X2}, b); } ret.ToString(); return ret.ToString(); } #endregion #region DES解密 /// summary /// /// /summary /// param namepToDecrypt需要解密的字符串/param /// param namekey密钥/param /// returns/returns public static string DecryptString(string pToDecrypt, string key) { //实现一个加密服务的类的对象这个类提供了DES加密算法 DESCryptoServiceProvider des new DESCryptoServiceProvider(); //实现一个二进制数组保存将需要解密的字符转换为二进制后的数据因为加密后的数据用16位字符保存所以定义的大小为源字符串一半 byte[] inputByteArray new byte[pToDecrypt.Length / 2]; //将解密内容转换为32位整数然后存储在二进制数组里 for (int x 0; x pToDecrypt.Length / 2; x) { int i (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] (byte)i; } //设置秘钥和初始化向量 des.Key Encoding.UTF8.GetBytes(key); des.IV Encoding.UTF8.GetBytes(key); //用来存储解密内容的内存流 MemoryStream ms new MemoryStream(); //加密转换流 CryptoStream cs new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); //转换后写入数据 cs.Write(inputByteArray, 0, inputByteArray.Length); //更新存储清理缓存 cs.FlushFinalBlock(); StringBuilder ret new StringBuilder(); return Encoding.UTF8.GetString(ms.ToArray()); } #endregion }客户端代码using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using UnityEngine; /// summary /// 加密UI界面 /// /summary public class Encipherment : MonoBehaviour { //加密 解密、复制按钮 [SerializeField] Button enciphermentBtn; [SerializeField] Button decodeBtn; [SerializeField] Button copyBtn; //密钥 内容InputField //[SerializeField] InputField key; string key; [SerializeField] InputField content; //结果Text [SerializeField] Text result; string resultContent; void Start() { key ConfigFile.LoadString(PrivateKey); //按钮点击事件 enciphermentBtn.onClick.AddListener(EnciphermentEvent); //加密 decodeBtn.onClick.AddListener(DecodeEvent); //解密 copyBtn.onClick.AddListener(CopyContent); //复制 } bool isCopyfalse; private void OnGUI() { if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); } if (isCopy) { isCopy false; GUIUtility.systemCopyBuffer resultContent; } } #region 加密方法 void EnciphermentEvent() { try { resultContent DesTool.EncryptString(content.text, key); result.text resultContent 加密成功; Debug.Log(resultContent); } catch (System.Exception ex) { result.text ex.ToString(); throw; } } #endregion #region 解码方法 void DecodeEvent() { try { resultContent DesTool.DecryptString(content.text, key); result.text resultContent 解密成功; Debug.Log(result.text); } catch (System.Exception ex) { result.text ex.ToString(); throw; } } #endregion #region 复制 void CopyContent() { if (resultContent ! string.Empty) { //System.Windows.Forms.Clipboard.SetDataObject(resultContent); isCopy true; result.text resultContent \n 复制成功; } else { Debug.Log(内容为空); } } #endregion }AES加密using System; using System.Collections; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; using UnityEngine; public class MD5Tool { //private string key 12348578902223367877723456789012; //32位 /// summary /// 加密 返回加密后的结果 /// /summary /// param nametoE需要加密的数据内容/param /// returns/returns public static string EncryptString(string toE,string key) { byte[] keyArray Encoding.UTF8.GetBytes(key); RijndaelManaged rDel new RijndaelManaged(); rDel.Key keyArray; rDel.Mode CipherMode.ECB; rDel.Padding PaddingMode.PKCS7; ICryptoTransform cTransform rDel.CreateEncryptor(); byte[] toEncryptArray Encoding.UTF8.GetBytes(toE); byte[] resultArray cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } /// summary /// 解密 返回解密后的结果 /// /summary /// param nametoD加密的数据内容/param /// returns/returns public static string DecryptString(string toD,string key) { byte[] keyArray Encoding.UTF8.GetBytes(key); RijndaelManaged rDel new RijndaelManaged(); rDel.Key keyArray; rDel.Mode CipherMode.ECB; rDel.Padding PaddingMode.PKCS7; ICryptoTransform cTransform rDel.CreateDecryptor(); byte[] toEncryptArray Convert.FromBase64String(toD); byte[] resultArray cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Encoding.UTF8.GetString(resultArray); } }注意Des密钥需要8位以上 AES需要32位