如何生成和验证软件许可证

时间:2016-08-22 05:22:45

标签: winforms encryption

我有困惑,我陷入了注册Windows应用程序的过程中。我有Windows应用程序,有Demo和完整版本。当用户下载软件并通过用户/注册电子邮件地址自动发送演示版本密钥时,我必须为演示和完整版创建两个密钥,如果用户想要完整版本,那么他必须在此案例中与软件所有者联系我要求完整版许可。我已经是this

每次嵌入软件演示和完整版密钥时,我们是否需要为Windows应用程序提供新的构建(exe)?或者只有一个构建(exe)可以帮助我们处理所有用户注册过程吗?

如果我们可以通过一个构建来实现它,那么如何?

由于

1 个答案:

答案 0 :(得分:0)

1)为您的应用程序创建许可证密钥功能 曾经想为您的应用程序添加许可证密钥功能吗? 这很简单但需要花很多时间 因为你需要提出一个很难被破解的好算法。

你需要什么?

1)密钥生成器。

2)客户端应用程序中的Key和DateValidation函数

3)在注册表或硬盘驱动器的某个位置注册客户端的信息,以确保他已经 输入了注册信息。

现在发送像这样的产品密钥是不合逻辑的。 任何孩子都可以在这里理解algorthim。 所以你可以做的是用另一个char替换每个char。 例如 : 原始密钥:ABCD - EFGH - IJKL - MNOP 产品密钥:PLHD - OKGC - JJFB - MIEA

1)密钥生成器功能:

我将给出Create_Key日期,如:ABCDEFGHIJKLMNOP,它将替换所有内容并添加" - "每4个字符后 代码:

private string Create_Key(string data)
{
    byte[] bytes = Encoding.ASCII.GetBytes(data);
    string KEY = string.Empty;

    KEY += data[15];
    KEY += data[14];
    KEY += data[8];
    KEY += data[9];
    KEY += "-";
    KEY += data[6];
    KEY += data[11];
    KEY += data[4];
    KEY += data[12];
    KEY += "-";
    KEY += data[2];
    KEY += data[3];
    KEY += data[13];
    KEY += data[5];
    KEY += "-";
    KEY += data[7];
    KEY += data[10];
    KEY += data[1];
    KEY += data[0];

    return KEY;
}

在客户端应用程序中,客户端将提供产品密钥,您需要按照以下步骤确保密钥为valis 1)检查密钥的前缀

2)如果前缀正确,则它是有效密钥,然后让我们检查密钥的到期日期

3)如果密钥尚未过期,则打开appliation。

- a)密钥验证功能:[Read Prefix]

密钥验证功能与密钥生成器功能相同,即>>> Create_Key(), 因为我们在密钥生成过程中使用相同的algorthim。

第一步:反转产品密钥,因为我们需要原始密钥来读取前缀。 代码:

 private string Create_Key(string Product_Key)
    {
        byte[] bytes = Encoding.ASCII.GetBytes(Product_Key);
        string KEY = string.Empty;

        KEY += Product_Key[15];
        KEY += Product_Key[14];
        KEY += Product_Key[8];
        KEY += Product_Key[9];
        KEY += "-";
        KEY += Product_Key[6];
        KEY += Product_Key[11];
        KEY += Product_Key[4];
        KEY += Product_Key[12];
        KEY += "-";
        KEY += Product_Key[2];
        KEY += Product_Key[3];
        KEY += Product_Key[13];
        KEY += Product_Key[5];
        KEY += "-";
        KEY += Product_Key[7];
        KEY += Product_Key[10];
        KEY += Product_Key[1];
        KEY += Product_Key[0];

        return KEY;
    }

第二步:  创建一个Bool函数来重新调整密钥的合法状态:

private bool validate_key(string key)
    {
        string[] seperate_filelds = key.Split('-');
        int counter=0;
        bool is_legit = false;

        foreach (string each_field in seperate_filelds)
        {
            counter++;
            // reading the first field which is prefix field
            if (counter == 1)
            {
                if (each_field == "Your_Prefix")
                {
                    is_legit = true;
                }
            }
            else
            { break; }
        }

        return is_legit;
    }

For Detail Reference