unity 数据加密

2015年01月16日 10:41 0 点赞 0 评论 更新于 2025-11-21 14:16

在 Unity 开发中,数据加密是保障数据安全的重要手段。本文将介绍两种常见的数据加密方法:C# 中的对称加密算法(以 DES 为例)和 MD5 加密算法。

一、C# 中对字符串加密解密(对称算法)

在 Unity 里,我们可以使用 C# 自带的对称算法对数据进行加密和解密。以下是具体实现代码:

using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using UnityEngine;

public class StringEncryption
{
#region 方法一:C# 中对字符串加密解密(对称算法)
private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

/// <summary>
/// DES 加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为 8 位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString, string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
cStream.Close();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptString;
}
}

/// <summary>
/// DES 解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为 8 位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返回源串</returns>
public static string DecryptDES(string decryptString, string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
cStream.Close();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
Debug.Log("catch");
return decryptString;
}
}
#endregion

#region 方法二:MD5 不可逆加密
// 32 位加密
public string GetMD5_32(string s, string _input_charset)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));
StringBuilder sb = new StringBuilder(32);
for (int i = 0; i < t.Length; i++)
{
sb.Append(t[i].ToString("x").PadLeft(2, '0'));
}
return sb.ToString();
}

// 16 位加密
public static string GetMd5_16(string ConvertString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
t2 = t2.Replace("-", "");
return t2;
}
#endregion
}

代码解释

  • DES 加密和解密:DES(Data Encryption Standard)是一种对称加密算法,加密和解密使用相同的密钥。在上述代码中,EncryptDES 方法用于加密字符串,DecryptDES 方法用于解密字符串。加密和解密过程都需要一个 8 位的密钥。
  • 注意事项:使用 DES 加密时,需要自定义一个密钥,解密时也必须使用相同的密钥才能正确解密数据。

二、MD5 加密算法

MD5 是一种常见的哈希算法,它生成的哈希值是不可逆的,常用于存储用户密码等敏感信息。以下是 32 位和 16 位 MD5 加密的实现:

代码解释

  • 32 位 MD5 加密GetMD5_32 方法接收一个字符串和字符编码作为参数,返回该字符串的 32 位 MD5 哈希值。
  • 16 位 MD5 加密GetMd5_16 方法接收一个字符串作为参数,返回该字符串的 16 位 MD5 哈希值。

三、总结

  • 对称加密(DES):适用于需要对数据进行加密和解密的场景,例如在网络传输中保护数据的机密性。但需要妥善保管密钥,否则数据可能会被泄露。
  • MD5 加密:由于其不可逆性,适合用于存储用户密码等敏感信息。但需要注意的是,MD5 存在一定的安全风险,如碰撞攻击,因此在实际应用中,建议结合其他安全措施使用。

经测试,上述两种加密方法在 Unity 中都是可行的。开发者可以根据具体的需求选择合适的加密方法来保障数据的安全。

作者信息

feifeila

feifeila

共发布了 3994 篇文章