unity Des和AES 加密解密

发布时间:2026/11/8 8:18:16
unity Des和AES 加密解密 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位

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询