Unix-version
描述
密钥生成器的 UNIX 版本是一个 PHP 文件,其中包含生成序列号所需的所有信息。该文件位于 Keygen\PHP 中。下面我们描述使用这种生成器的关键点。
配置生成器
在 PHP 文件的开头,设置代码位于:
////////////////////////////////////////////////////////////////////////////////////////////// // 以下行应由 VMProtect License Manager 生成 $exported_algorithm = "RSA"; $exported_bits = 2048; $exported_private = "PJvj4kEpoQMIpYK+9wEt......xKeiSZgzdiln8Q=="; $exported_modulus = "rOlny/3QgZb/VmGr3CmY......I6ESAUmtQ+RBqQ=="; $exported_product_code = "oLQdGUn8kVk="; //////////////////////////////////////////////////////////////////////////////////////////////
此代码由 VMProtect 自动生成(请参阅 导出产品参数 ),并且对于每个特定产品都是唯一的。准确复制它至关重要,否则生成器将无法正常工作。
密钥的内容
然后,生成器指定一个序列号的内容。这些内容在一个数组中指定,下面列出了键的所有可能参数。但是,在实际应用中,可能会省略其中一些:
$params = array( user_name => "John Doe", // UTF-8! email => "john@doe.com", hwid => "vHGMdMRvGCPjWcCQ", // 与 VMProtectGetCurrentHWID 返回的信息完全一致 expire_date => array(year => 2009, month => 10, day => 1), maxbuild_date => array(year => 2009, month => 10, day => 1), time_limit => 10, user_data => base64_decode("CGCvRvMWcPHGdMjQ"), // 字节串 );
成功的密钥生成处理函数
下面您可以看到一个在成功生成序列号时调用的最简单的函数。发送给它的唯一参数是序列号字符串。该函数必须将序列号传递给调用者(电子商务代理),通常使用 echo 命令。为方便起见,字符串被初步拆分为子字符串,每个子字符串 75 个符号。此外,此功能可以通过电子邮件将生成的序列号发送给开发人员或将其添加到数据库中。
function OnSerialGenerated($serial) { $serial = wordwrap($serial, 75, "\n", true); echo $serial; }
密钥生成器错误处理函数
需要我们注意的代码的最后一部分是出现问题时调用的函数。此函数接收带有错误消息的字符串,当它完成时,调用 die() 函数。处理函数必须做两件事:代替密钥,向电子商务代理返回一条消息,说明密钥将被手动发送。并向开发人员发送有关错误的详尽信息以修复它并手动生成密钥。
function OnSerialGenerationFailed($details) { echo "您将在接下来的 24 小时内收到序列号"; // 发给客户的消息 // mail("support@vendor.com", "Houston,我们有个问题", $details); // 发给供应商的消息 }
有几种可能的错误原因:算法参数不正确,密钥参数不正确,用户名或电子邮件太长,或者序列号太长,不适合算法中指定的位数. 这就是为什么 OnSerialGenerationFailed 函数必须将有关问题的详细信息发送给开发人员,以便他可以生成序列号并将其发送给客户。
其他需要考虑的事项
示例包含密钥生成器的简化版本。它没有考虑 开发网络生成器的建议 。它不检查调用者的 IP 地址,也不分析输入参数。在此基础上开发自己的生成器时请注意这一点。
用户名和电子邮件必须作为 UTF-8 字符串传递。确保您的电子商务代理以 UTF-8 编码发送这些数据,或者如果不是这样,则对信息进行转码。错误的编码不会导致生成错误的序列号,但这样的序列号显示的注册名称可能与真实用户的名称不同,所以他或她在“关于”窗口中看到它可能会感到惊讶应用
非对称加密是一个复杂的数学过程。如果使用纯 PHP 实现,没有任何第三方库,序列号生成可能需要几十秒。只要可用,生成器就会使用 gmp_powm 、 bi_powmod 和 bcpowod 函数。如果您的主机生成序列号的时间过长,我们建议您要求主机提供商启用这些功能。例如, gmp_powm 函数的工作速度比 bcpowmod 快十倍。