UnityC# MD5验证

孙广东 2014.6.24

数据经网络传输后会变得非常不安全,最简单有效的解决方案是给数据加一个密钥,使用MD5 算法算出校验码,服务器收到数据和校验码后在进行比较校验码是否正确,以此来判断数据是否修改过。 PHP生成 的 MD5 校验默认为32位的字符串, 而C#默认的是16位的字节数组,需要略加修改,转为32个字节的字符串,,代码如下:

参考地址为: ?title=MD5

public static string Md5Sum(string strToEncrypt){// 将需要加密的字符串转为byte数组byte[] bs = UTF8Encoding.UTF8.GetBytes(strToEncrypt);// 创建md5 对象System.Security.Cryptography.MD5 md5;md5 = System.Security.Cryptography.MD5CryptoServiceProvider.Create();// 生成16位的二进制校验码byte[] hashBytes = md5.ComputeHash(bs);// 转为32位字符串string hashString = "";for (int i = 0; i < hashBytes.Length; i++){hashString += System.Convert.ToString(hashBytes[i], 16).PadLeft(2, ‘0’);}return hashString.PadLeft(32, ‘0’);}

使用这个 MD5 函数非常简单, 在下面的代码示例中,数据是包含有 “hello world” 的一个字符串, 密钥位123, 使用Md5Sum算出32位的校验码字符串。

string data = "hello world";string key = "123";Md5Sum(data + key); // 返回

Python

<python>import hashlib

def md5Sum(inputString):

return hashlib.md5(inputString).hexdigest()

< / python >

红宝石

require ‘digest/md5’

def md5Sum(inputString)

Digest::MD5.hexdigest(inputString)

end

2) 我想要使用某种形式的哈希值来表示该item ,因为事实证明很难有人通过修改 PlayerPrefs作弊。

3) PlayerPrefs 键也是 md5 的哈希值,使得阅读 PlayerPrefs 文件是不可能。

using UnityEditor;using UnityEngine; using System.Security.Cryptography;using System.Text; public class ItemGUID : EditorWindow{// Add menu item named "My Window" to the Window menu[MenuItem("UnityExtensions/Generate ItemGUID")]public static void ShowWindow(){MD5 md5Hash = MD5.Create();BaseItem[] items = FindSceneObjectsOfType(typeof(BaseItem)) as BaseItem[];foreach (BaseItem item in items){byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(item.name));StringBuilder sBuilder = new StringBuilder();for (int i = 0; i < data.Length; i++){sBuilder.Append(data[i].ToString("x2"));}item.guid = sBuilder.ToString();}}}

非常简单和快速,和最重要的是超级有效。

版权声明:本文为博主原创文章,未经博主允许不得转载。

既有美妙的风景,也会有称不上景只有风的地方。

UnityC# MD5验证

相关文章:

你感兴趣的文章:

标签云: