孙广东  2014.6.24

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

参考地址为:  http://wiki.unity3d.com/index.php?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);  // 返回

服务器端:

如上文所指出,上述的unity代码将返回匹配那个从 PHP 的 md5() 函数返回的哈希值。如果在服务器端使用的另一种语言,这里有一些例子:

Perl

<perl>use Digest::MD5 qw(md5_hex);

my $hashString = md5_hex($stringToHash); </perl>

PHP

< perl > $hashString = md5($stringToHash);< / perl >

Python

<python>import hashlib

def md5Sum(inputString):

  return hashlib.md5(inputString).hexdigest()

< / python >

红宝石

require 'digest/md5'

def md5Sum(inputString)

   Digest::MD5.hexdigest(inputString)

end

Shell

你必须安装在服务器上的 md5sum 程序。 <bash>HASH = `echo "$STRING_TO_HASH" | md5sum | cut -f 1 -d' '` </bash>

在来看看在Unity中的其他应用:

为库存系统生成 md5 的哈希值。使用哈希值我有几个重要原因。

1) 库存系统被链接到 PlayerPrefs。我需要一个非整数的方式来表示这个item 。

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();}}
}

对我而言,我有许多游戏对象,表示我的游戏中的Items 。每个游戏对象都有 BaseItem 组件,其中包含items 统计的一些实用函数。

它有一个public 字符串 guid、 变量,每次我运行此编辑器脚本设置他。在创建新items时,我重新运行该脚本,将所有的 guid 变量重置为其名称的 md5 哈希值。

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




UnityC# MD5验证相关推荐

  1. 一个简单的在线md5验证工具的实现

    因为要开始找工作了,因此更新博客的时间变长了.这学期学校开了门c#.NET的课程,基于.NET技术的强大,我也决定开始自学用ASP.NET来开发网站(以前曾用ASP开发过). 今天遇到要在数据库中存储 ...

  2. MD5验证文件是否重复

    根据文件生成MD5标识串,当两个标识串一致时认为文件内容相同. 文件生成MD5 String方法如下: import java.io.File; import java.io.FileInputStr ...

  3. MD5验证文件完整性 C++

    读取文件内容并且做MD5验证 C++ 为了验证下载的文件是否完整,是否被篡改,常用的验证方法为MD5验证,文件生成32位验证码,可验证文件是否完整下载或被篡改. md5.h文件 #ifndef MD5 ...

  4. JavaScript使用md5验证登录加密

    直接上代码 1.HTML部分 <!DOCTYPE html> <html lang="en"> <head><meta charset=& ...

  5. CAS 4.0.0RC 配置MD5验证功能

    配置内容同一样,只是增加一些配置. 因为cas已经默认就支持MD5加密验证,所以只是修改一下配置就可以了. <bean id="primaryAuthenticationHandler ...

  6. MD5验证工具:md5sum

    linux 下 shell命令 ,制作md5码 也用于软件的md5校验 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5 全称是报文摘要算法(Message-Digest Alg ...

  7. java md5验证工具_Java MD5校验工具类

    之前使用到了NIO的FileChannel做文件快速阅读,后来发现存在一个巨大的BUG,使用它会一直不释放文件句柄,即生成MD5的文件不能操作(移动或删除等),这个BUG网上吵得沸沸扬扬,至今没有解决 ...

  8. Excel VBA之MD5验证密码介绍

    MD5是一种不可逆的验证文件完整性的Message--Digest 算法,由MIT的实验室最早提出来,想了解历史的可以自行查阅,对于MD5不可逆的主要原因是Hash算法不可逆,其具体操作里的算法有求余 ...

  9. php支付宝接口md5签名,支付宝接口url生成,MD5验证

    URL生成: $parameter = array( 'service'           => 'create_forex_trade', 'partner'           => ...

  10. Intellij IDEA里的md5验证

        在网页登录界面里,常常需要输入用户的账户和密码,这个密码会在加盐之后,再取MD5,然后,与数据库里的MD5进行比较,若相同说明密码是正确的,若不同说明密码错误.     下面介绍,在Intel ...

最新文章

  1. 利用反射实现类的动态加载
  2. 美团BERT的探索和实践 | CSDN原力计划
  3. 宏基因组 微生物人注意了!这个微信群可以学英语,而且全程免费
  4. 支付宝钱包支付iOS SDK的方法
  5. 【USACO Mar08】 奶牛跑步 A-star k短路
  6. web api 二
  7. Setting Gdb on Windows
  8. linux中shell命令之间与||符号
  9. 关于DPM(Deformable Part Model)算法中模型可视化的解释
  10. 上海Oracle高峰会感悟
  11. 10. Firewalls (防火墙 2个)
  12. 信息学奥赛一本通C++语言——1011: 甲流疫情死亡率
  13. oracle视频教程 任务,Oracle基础教程(两位专家手把手教你完成各种常见任务)
  14. 使用方法_山西硅肥使用方法
  15. 如何在网络视听行业建一扇内容安全大门?
  16. Xshell中文乱码怎么处理?
  17. 拓端tecdat|R语言:逻辑回归ROC曲线对角线分析过程及结果
  18. linux(5)--补充(管道| / 重定向 / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)...
  19. [深度学习论文笔记][Depth Estimation] Depth Map Prediction from a Single Image using a Multi-Scale Deep Netw
  20. php 字符串大写转小写转大写,字符串大小写批量互相转换 - 在线工具

热门文章

  1. MySQL查询不同年份母亲节_不同国家的母亲节发展故事
  2. Recyclerview 特别好用的局部刷新item方法
  3. web16(ColorBox插件编写)
  4. python星号直角三角形边长公式_三角形边长计算公式大全
  5. Xcode 8 过滤系统输出
  6. Java实现坦克大战小游戏
  7. notes服务器标识文件,怎样重新验证将要过期的服务器标识符文件_lotus notes
  8. 浅谈什么是SEO?如何优化SEO?
  9. 玉米社:百度竞价关键词“否定”与“精确否定”的区别
  10. c c python的区别_python版本的区别 Cpython Jython pypy ?