今天分享几种比较简单的项目加密、激活的思路,但是不是对项目的源代码加密,只是对不是太懂破解的人有用的几种加密思路,当然,万物能加密就能解密,只是时间问题
这个可以使用常量用来保存账号密码,或者注册表,或者本地持久化数据,思路就是先将账号密码设置好,然后其他人用这个软件的时候需要账号密码来激活,用以加密
using UnityEngine;
using UnityEngine.UI;
public class Encript2 : MonoBehaviour
{
//设置一个初始的账号和密码
public string UserName = "";
public string PassWord = "";
//UI
public Text m_UserNameText;
public Text m_PassWordText;
public Text m_HelpText;
public Button m_BtnAticvation;
public Button m_BtnExit;
void Start()
{
m_BtnAticvation.onClick.AddListener(BtnEvent_Aticvation);
m_BtnExit.onClick.AddListener(BtnEvent_Exit);
//判断是否已经激活
Decide_Acticvation();
}
public void Decide_Acticvation()
{
if (UserName == "admin" && PassWord == "123456")
{
gameObject.SetActive(false);
}
}
public void BtnEvent_Aticvation()
{
UserName = m_UserNameText.text;
PassWord = m_PassWordText.text;
if (m_UserNameText.text == "admin" && m_PassWordText.text == "123456")
{
//激活成功
gameObject.SetActive(false);
}
else
{
//未激活成功
m_HelpText.text = "账号密码不正确";
}
}
public void BtnEvent_Exit()
{
Application.Quit();
}
}
3 绑定参数
整体就思路很简单,设置一个本地的常量,然后进入软件需要先激活,激活成功
优点:简单粗暴
缺点:容易被破解
这个呢,其实也很简单,就在首先在客户端写一个验证程序,验证 当前电脑的设备唯一标识加自定义字段,之后加密后的文件数据
对比,是否相同,相同就进入程序,不同就关闭程序
然后在电脑端写一个激活程序
过程:
1、首先做一个激活的界面
做的比较丑,最重要的是功能!!!
2、代码
using Microsoft.Win32;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
public class Encript3 : MonoBehaviour
{
public GameObject m_PanelEncrypted;
void Start()
{
string s1 = SystemInfo.deviceUniqueIdentifier;
string s2 = GetMD5String(s1);
//验证本地的加密字符串是否正确
Verification_MD5(s2);
}
//验证本地的md5正确与否
public void Verification_MD5(string ValidateMD5)
{
RegistryKey RootKey, RegKey;
RootKey = Registry.CurrentUser.OpenSubKey("UserSetting", true);
//打开子项:HKEY_CURRENT_USER\UserSetting\Encrypted
if ((RegKey = RootKey.OpenSubKey("Encrypted", true)) == null)//如果文件不存在,就显示要激活的界面
{
m_PanelEncrypted.SetActive(true);
}
//异常捕捉,如果出现程序异常,比如闪退
try
{
object encrypted = RegKey.GetValue("EncryptedString"); //读取键值
if (encrypted.ToString() == ValidateMD5)
{
m_PanelEncrypted.SetActive(false);
}
else
{
m_PanelEncrypted.SetActive(true);
}
}
catch
{
print("异常状况");
}
}
///
/// 通过字符串获取MD5值,返回32位字符串。
///
///
///
public static string GetMD5String(string text)
{
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(text));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString().ToLower();
}
}
OK,小伙伴们可以试试了。。对啦,还有激活程序。。
代码:
///
/// 通过字符串获取MD5值,返回32位字符串。
///
///
///
public static string GetMD5String(string text)
{
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(text));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString().ToLower();
}
//激活程序
public void Activation()
{
string md5 = GetMD5String(SystemInfo.deviceUniqueIdentifier);
// 创建键值对
RegistryKey RootKey, RegKeyRoot,RegKey;
//项名为:HKEY_CURRENT_USER
RootKey = Registry.CurrentUser;
if ((RegKeyRoot = RootKey.OpenSubKey("UserSetting",true))== null)
{
RootKey.CreateSubKey("UserSetting");
RegKeyRoot = RootKey.OpenSubKey("UserSetting", true);
}
//打开子项:HKEY_CURRENT_USER\Software\TestToControlUseTime
if ((RegKey = RegKeyRoot.OpenSubKey("Encrypted", true)) == null)
{
RegKeyRoot.CreateSubKey("Encrypted"); //不存在,则创建子项
RegKey = RegKeyRoot.OpenSubKey("Encrypted", true); //打开键值
RegKey.SetValue("EncryptedString", (object)md5); //创建键值
return;
}
else
{
RegKey.SetValue("EncryptedString", (object)md5);
return;
}
}
总结:可以自己写加密程序,或者加一些其他的参数,增加破解的难度
优点:难破解,安全性更高
缺点:还是不够安全,如果破解源代码的话,就知道怎么加密了,就可以反向解密
这个思路就是将加密程序放到服务器,其他人就算是破解了代码,也不知道加密思路,就无法反向解密
2、代码
using Microsoft.Win32;
using System.Collections;
using UnityEngine;
public class Encript4 : MonoBehaviour
{
public GameObject m_PanelEncrypted;
string md5 = "";
void Start()
{
StartCoroutine(GetData());
//验证本地的加密字符串是否正确
Verification_MD5(md5);
}
//验证本地的md5正确与否
public void Verification_MD5(string ValidateMD5)
{
RegistryKey RootKey, RegKey;
RootKey = Registry.CurrentUser.OpenSubKey("UserSetting", true);
//打开子项:HKEY_CURRENT_USER\UserSetting\Encrypted
if ((RegKey = RootKey.OpenSubKey("Encrypted", true)) == null)//如果文件不存在,就显示要激活的界面
{
m_PanelEncrypted.SetActive(true);
}
//异常捕捉,如果出现程序异常,比如闪退
try
{
object encrypted = RegKey.GetValue("EncryptedString"); //读取键值
if (encrypted.ToString() == ValidateMD5)
{
m_PanelEncrypted.SetActive(false);
}
else
{
m_PanelEncrypted.SetActive(true);
}
}
catch
{
print("异常状况");
}
}
public IEnumerator GetData()
{
WWW www = new WWW("http://127.0.0.1/Test.php?md5="+SystemInfo.deviceUniqueIdentifier);
yield return www;
if (www.error != null)
{
yield return null;
}
else
{
md5 = www.text;
}
}
}
OK,今天就到这吧