unity Des和MD5 加密解密

 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 name="pToEncrypt">加密内容</param>
    /// <param name="key">密钥</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 name="pToDecrypt">需要解密的字符串</param>
    /// <param name="key">密钥</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 isCopy=false;
    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


}

MD5加密

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 name="toE">需要加密的数据内容</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 name="toD">加密的数据内容</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位以上 MD5需要32位

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值