Unity-机器码加密
早前在开发项目的过程中,就有这种需求: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-机器码加密相关推荐
- Unity - 游戏加密方案-DLL加密方法记录
Unity - 游戏加密方案-DLL加密方法记录 DLL加密 Unity中的自定义脚本都会打包到Assembly-CSharp.dll这个DLL中,所以目前常见的游戏加密方案就是,用对称加密算法加密A ...
- 加密授权验证学习之五——RSA非对称加密算法将机器码加密为注册码
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用.我们这里使用RSA加密算法,主要用到openssl库,openssl是可以很方便加密解密的库,可以使用它来对需要在网络中 ...
- Unity/VS/C#Unity工程加密授权开发---LicenseProj
最近在发布Unity工程时要考虑给Unity加密的问题,但有关此类的文章很少,多数人推荐使用C#中的System.Management类实现,虽然Unity3d支持.net3.5架构,但是并不是所有功 ...
- unity md5加密
MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data securi ...
- unity app加密
Unity3D现在很火.应用得场景很多.那么针对unity发布的程序如何加密呢? Unity3D程序的安全问题 代码安全问题 Unity3D 程序的核心程序集文件 Assembly-CSharp.dl ...
- Unity 项目加密插件Obfuscator
加密混淆的目的是让不怀好意者更难对你的项目进行逆向工程,我们可以使用Obfuscator 插件. 该插件的好处是与Unity构建过程无缝链接,源文件的内容保持不变,而混淆只针对于已编译的程序集. 插件 ...
- GG修改Unity 3D加密游戏
首先是提取Assembly-CSharp.dll文件,参见简单Unity 3D游戏加密dll文件提取 然后使用dnSpy找到要修改代码的特征码: 在set上鼠标右键"在十六进制编辑器中显示方 ...
- 给unity项目加密利用mac地址
今天真是又学了一招,使用mac地址给项目加密,防止被盗用信息, bool isOpen = false;private void Start(){NetworkInterface[] nis = Ne ...
- unity文字加密解密
最近因为需求用到了,分享给大家Base64编码解码 using System; using System.Collections; using System.Collections.Generic; ...
- 【Unity】如何使用MD5加密方式传递资料
在实际专案中, 如果需要用到资料传递, 可以利用 MD5 来为资料进行加密,考虑到有些人还不会,下面就给大家介绍下 Unity MD5 加密,一起来看看吧. 实际利用如下: 先建立 CreateMD5 ...
最新文章
- Linux查看实时带宽流量情况
- httpclient3.1的多线程处理
- appium desktop 1.7 byName不能用,重写
- SQLserver2008数据表的修改操作
- SG函数和SG定理(Sprague_Grundy)
- ZSH and oh-my-zsh 强强联合
- Unix 网络编程 读书笔记1
- Leetcode108. 有序数组转为二叉树
- 如何区分同一Class的不同实例对象
- 浅谈Unity中的优化
- 方正计算机如何用u盘安装系统,方正电脑用u盘装系统操作方法
- libyuv 海思平台编译测试
- 扩展卡尔曼滤波EKF
- echarts 柱状图颜色及渐变色设置
- 网络号和主机号的计算
- 云原生下的开发测试实践
- 对傅里叶函数以及级数的理解
- var 和int定义变量的问题【C#】
- 灰色墙面搭配白色沙发,时尚的整体质感
- 全球及中国LCP行业发展动态与投资趋势分析报告2022~2028年
热门文章
- 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?还要我说出数据库表设计!...
- 学校计算机语音室管理制度,多媒体、语音室管理制度
- matlab专业版与试用版区别,试用版和正式版的区别等
- python中len字典_Python 字典(Dictionary) len()方法
- 【傅里叶变换】DFT详细分析与Python实现
- Redis 事件循环函数serverCron
- 内网网络服务器怎么修改密码,服务器远程如何修改密码
- iOS网络请求错误nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1004
- 写出一个美观的表单页
- wincurl:一款基于HTTP协议的轻量级web资源抓取和上传工具