我有困惑,我陷入了注册Windows应用程序的过程中。我有Windows应用程序,有Demo和完整版本。当用户下载软件并通过用户/注册电子邮件地址自动发送演示版本密钥时,我必须为演示和完整版创建两个密钥,如果用户想要完整版本,那么他必须在此案例中与软件所有者联系我要求完整版许可。我已经是this。
每次嵌入软件演示和完整版密钥时,我们是否需要为Windows应用程序提供新的构建(exe)?或者只有一个构建(exe)可以帮助我们处理所有用户注册过程吗?
如果我们可以通过一个构建来实现它,那么如何?
由于
答案 0 :(得分:0)
1)为您的应用程序创建许可证密钥功能 曾经想为您的应用程序添加许可证密钥功能吗? 这很简单但需要花很多时间 因为你需要提出一个很难被破解的好算法。
你需要什么?
1)密钥生成器。
2)客户端应用程序中的Key和DateValidation函数
3)在注册表或硬盘驱动器的某个位置注册客户端的信息,以确保他已经 输入了注册信息。
现在发送像这样的产品密钥是不合逻辑的。 任何孩子都可以在这里理解algorthim。 所以你可以做的是用另一个char替换每个char。 例如 : 原始密钥:ABCD - EFGH - IJKL - MNOP 产品密钥:PLHD - OKGC - JJFB - MIEA
我将给出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。
密钥验证功能与密钥生成器功能相同,即>>> 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;
}