早前在开发项目的过程中,就有这种需求:exe可执行程序只能在某一台电脑上操作或有一定的时间限制,本章将通过Visual studio窗体应用程序与Unity结合的方式介绍如何使Unity打包程序只能在一台电脑上使用。

一、Visual studio端(Visual studio 2019)

(1)创建窗体应用项目


搜索Windows窗体应用,选择如下图所示项,下一步

若找不到Windows窗体应用,需要在Visual Studio Installer中安装.NET桌面开发项

为了方便测试,各位同学尽量统一项目名称(MachineCodeEncryption)

(2)打开工具箱

项目建好以后默认窗口如上图,可点击(视图/工具箱)或使用快捷键Ctrl+Alt+X打开工具箱。

(3)编辑窗口标题名称

这里的窗口名称可任意编辑,有两种修改方式,一种直接在脚本内部修改,还有一种直接在编辑器窗口修改,个人建议采用第二种,编辑修改比较简单,直接鼠标左键选择窗口/控件,直接在解决方案资源管理器即可修改。

(4)搭建Form窗口

利用工具箱中的公共控件,搭建一个比较简单的Form窗口,如下图。

这里为了方便测试,名称先与测试案例所有控件名称一致,方便和代码对应上,修改方式:鼠标左键点击控件,在右下角的面板修改,规则从上往下,从左往右控件名称如下:

label_MachineID、textBox_MachineID
label_AuthorizationCode、textBox_AuthorizationCode
button_Calculate

(5)MD5加密函数编写(32位字符串)

想了解16位或64位的同学可以进—MD5加密—中查看。

添加MD5Cryption类与函数编写:

using System.Security.Cryptography;
using System.Text;namespace MachineCodeEncryption
{public class MD5Cryption{/// <summary>/// MD5 32位加密/// </summary>/// <param name="_encryptContent">需要加密的内容</param>/// <returns></returns>public static string EncryptMD5_32(string _encryptContent){string content_Normal = _encryptContent;string content_Encrypt = "";MD5 md5 = MD5.Create();byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(content_Normal));for (int i = 0; i < s.Length; i++){content_Encrypt = content_Encrypt + s[i].ToString("X2");}return content_Encrypt;}}
}

(6)加密主逻辑编写

双击计算按钮

完整代码如下图

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace MachineCodeEncryption
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button_Calculate_Click(object sender, EventArgs e){if (!string.IsNullOrEmpty(textBox_MachineID.Text)){string authorizationCode = MD5Cryption.EncryptMD5_32(textBox_MachineID.Text);textBox_AuthorizationCode.Text = authorizationCode;}}}
}

(7)运行效果

最终结果:无论输入什么数据,最终返回加密后的32位字符串信息

(8)Windows应用程序与类库各输出一份

Windows应用程序输出是为了方便启动可执行程序并进行计算。
类库输出是为了方便导入Unity中进行调用,不需要再进行重复编写函数。

鼠标右击项目,进入属性

分别进行windows应用程序和类库生成操作


生成路径如下:

这里为了方便测试,将两次生成结果分别复制至桌面。

二、Unity端(Unity 2019.4.8)

(1)创建Unity项目

(2)创建项目所需文件夹并导入类库文件

(3)创建并搭建场景

初始场景,做验证操作

游戏场景

(3)编写逻辑代码

创建VerifyTest脚本,完善逻辑并挂载组件

using UnityEngine;
using UnityEngine.UI;
using MachineCodeEncryption;
using UnityEngine.SceneManagement;public class VerifyTest : MonoBehaviour
{public Text text_MachineID;public InputField inputField_AuthorizationCode;public Button button_EnterGame;private void Start(){text_MachineID.text = GetMachineID();button_EnterGame.onClick.AddListener(Event_EnterGame);}/// <summary>/// 获取设备识别码/// </summary>/// <returns></returns>public string GetMachineID() { return SystemInfo.deviceUniqueIdentifier; }/// <summary>/// 进入游戏/// </summary>public void Event_EnterGame(){if (inputField_AuthorizationCode.text == MD5Cryption.EncryptMD5_32(text_MachineID.text)){SceneManager.LoadScene("Game");}else{Debug.Log("用户授权码错误");}}
}


当然,这里的设备识别标识符只是一个代称,我更愿意称它为验证规则,有兴趣的同学可以自己定义其他规则,这里使用的SystemInfo.deviceUniqueIdentifier,来自于Unity中读取PC硬件信息这篇文章。

大致的逻辑为:用户在电脑上打开项目时,系统自动获取识别号并显示出来,而后打开窗体应用程序计算识别号对应的授权码,在Unity端中进行匹配即可实现单个电脑对应运行指定项目。

三、展现效果


本章到这里就结束了,只是给各位同学提供一个思路与做法,当然,完全可以采用其他规则来进行限制,另外也可以验证后写入到本地TxT文件中,实现一台电脑只需要验证一次后就可以直接进入的功能等等。

Unity-机器码加密相关推荐

  1. Unity - 游戏加密方案-DLL加密方法记录

    Unity - 游戏加密方案-DLL加密方法记录 DLL加密 Unity中的自定义脚本都会打包到Assembly-CSharp.dll这个DLL中,所以目前常见的游戏加密方案就是,用对称加密算法加密A ...

  2. 加密授权验证学习之五——RSA非对称加密算法将机器码加密为注册码

    RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用.我们这里使用RSA加密算法,主要用到openssl库,openssl是可以很方便加密解密的库,可以使用它来对需要在网络中 ...

  3. Unity/VS/C#Unity工程加密授权开发---LicenseProj

    最近在发布Unity工程时要考虑给Unity加密的问题,但有关此类的文章很少,多数人推荐使用C#中的System.Management类实现,虽然Unity3d支持.net3.5架构,但是并不是所有功 ...

  4. unity md5加密

    MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data securi ...

  5. unity app加密

    Unity3D现在很火.应用得场景很多.那么针对unity发布的程序如何加密呢? Unity3D程序的安全问题 代码安全问题 Unity3D 程序的核心程序集文件 Assembly-CSharp.dl ...

  6. Unity 项目加密插件Obfuscator

    加密混淆的目的是让不怀好意者更难对你的项目进行逆向工程,我们可以使用Obfuscator 插件. 该插件的好处是与Unity构建过程无缝链接,源文件的内容保持不变,而混淆只针对于已编译的程序集. 插件 ...

  7. GG修改Unity 3D加密游戏

    首先是提取Assembly-CSharp.dll文件,参见简单Unity 3D游戏加密dll文件提取 然后使用dnSpy找到要修改代码的特征码: 在set上鼠标右键"在十六进制编辑器中显示方 ...

  8. 给unity项目加密利用mac地址

    今天真是又学了一招,使用mac地址给项目加密,防止被盗用信息, bool isOpen = false;private void Start(){NetworkInterface[] nis = Ne ...

  9. unity文字加密解密

    最近因为需求用到了,分享给大家Base64编码解码 using System; using System.Collections; using System.Collections.Generic; ...

  10. 【Unity】如何使用MD5加密方式传递资料

    在实际专案中, 如果需要用到资料传递, 可以利用 MD5 来为资料进行加密,考虑到有些人还不会,下面就给大家介绍下 Unity MD5 加密,一起来看看吧. 实际利用如下: 先建立 CreateMD5 ...

最新文章

  1. Linux查看实时带宽流量情况
  2. httpclient3.1的多线程处理
  3. appium desktop 1.7 byName不能用,重写
  4. SQLserver2008数据表的修改操作
  5. SG函数和SG定理(Sprague_Grundy)
  6. ZSH and oh-my-zsh 强强联合
  7. Unix 网络编程 读书笔记1
  8. Leetcode108. 有序数组转为二叉树
  9. 如何区分同一Class的不同实例对象
  10. 浅谈Unity中的优化
  11. 方正计算机如何用u盘安装系统,方正电脑用u盘装系统操作方法
  12. libyuv 海思平台编译测试
  13. 扩展卡尔曼滤波EKF
  14. echarts 柱状图颜色及渐变色设置
  15. 网络号和主机号的计算
  16. 云原生下的开发测试实践
  17. 对傅里叶函数以及级数的理解
  18. var 和int定义变量的问题【C#】
  19. 灰色墙面搭配白色沙发,时尚的整体质感
  20. 全球及中国LCP行业发展动态与投资趋势分析报告2022~2028年

热门文章

  1. 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?还要我说出数据库表设计!...
  2. 学校计算机语音室管理制度,多媒体、语音室管理制度
  3. matlab专业版与试用版区别,试用版和正式版的区别等
  4. python中len字典_Python 字典(Dictionary) len()方法
  5. 【傅里叶变换】DFT详细分析与Python实现
  6. Redis 事件循环函数serverCron
  7. 内网网络服务器怎么修改密码,服务器远程如何修改密码
  8. iOS网络请求错误nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1004
  9. 写出一个美观的表单页
  10. wincurl:一款基于HTTP协议的轻量级web资源抓取和上传工具