[Unity3D Daily] Compartilhamento de idéias de criptografia e ativação para projetos do Unity3D

1. Introdução

Hoje, compartilho várias idéias simples para criptografia e ativação do projeto, mas elas não são o código-fonte do projeto, mas apenas algumas idéias de criptografia que são úteis para pessoas que não sabem como quebrar.Claro, tudo pode ser descriptografado pela criptografia, é apenas uma questão de tempo.

Segundo, o texto

Ideia 1: salvar a senha da conta no projeto

Isso pode ser usado para salvar a senha da conta, o registro ou os dados persistentes locais.A idéia é definir a senha da conta primeiro e, em seguida, outros precisam da senha da conta para ativar ao usar este software, para criptografia

Processo:
1 Primeiro criamos um
Insira a descrição da imagem aqui
código de interface do usuário 2

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 Parâmetros de ligação A
Insira a descrição da imagem aqui
ideia geral é muito simples, defina uma constante local e, em seguida, insira o software que precisa ser ativado primeiro, a ativação é bem-sucedida

Vantagens:
desvantagens simples e grosseiras : fáceis de serem quebradas

Ideia 2: Grave arquivos salvos com dados criptografados localmente

Na verdade, é muito simples. Primeiro, escreva um programa de verificação no cliente para verificar o identificador exclusivo do dispositivo de computador atual mais um campo personalizado. Depois
, se os dados do arquivo criptografado forem comparados, se são iguais, digite o programa se for o mesmo e feche-o se for diferente. Programe
e escreva um programa de ativação no computador

Processo:
1. Primeiro faça uma interface ativa,
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
é feia, a coisa mais importante é a função! ! !
2. Código

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("异常状况");
        }
    }

    /// <summary>
    /// 通过字符串获取MD5值,返回32位字符串。
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    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, amigos podem tentar. . Sim, existe um programa de ativação. .
Código:

/// <summary>
    /// 通过字符串获取MD5值,返回32位字符串。
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    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 = RootKey.OpenSubKey("Encrypted", true);  //打开键值
            RegKey.SetValue("EncryptedString", (object)md5);         //创建键值
            return;
        }
        else
        {
            RegKey.SetValue("EncryptedString", (object)md5);
            return;
        }
    }

Resumo: você pode escrever seu próprio programa de criptografia ou adicionar outros parâmetros para aumentar a dificuldade de quebrar

Vantagens: difícil de decifrar, maior segurança
Desvantagens: ainda não é seguro o suficiente, se você decifrar o código-fonte, você sabe como criptografar, pode descriptografar ao contrário

Idéia 3: Criptografar no lado do servidor e retornar a sequência criptografada

Essa idéia é colocar o programa de criptografia no servidor, mesmo que outras pessoas tenham decifrado o código e não conheçam a idéia de criptografia, elas não podem descriptografar na direção inversa

Processo:
1. O design da interface
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
é feio, a coisa mais importante é a função! ! !

2. Código

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, venha aqui hoje

Publicado 226 artigos originais · elogiado 509 · 530.000 visualizações

Acho que você gosta

Origin blog.csdn.net/q764424567/article/details/101061353
Recomendado
Clasificación