【发布时间】:2015-11-14 09:46:05
【问题描述】:
这是wordpress plugin 测试的一部分,它基本上是一个许可证管理器。我试图了解系统的内部结构。这是它的工作原理。
一旦插件被激活,它会使用一个简单的函数'lic_verification_private_secret' => uniqid('', true)生成一个私钥55d0ec3f9db414.02268045。现在,当有人购买物品时,例如。 wordpress 插件,生成公共许可证密钥55d5d22ab70d2(使用uniqid())。然后将公钥发送到客户的电子邮件 ID。客户将该密钥输入他的站点并向许可证服务器发送请求。下面是一个关于许可证管理器插件@server 如何匹配私钥和公钥的函数。
static function verify_secret_key() {
$slm_options = get_option('slm_plugin_options');
$private_secret_key = $slm_options['lic_verification_private_secret'];
$public_key = strip_tags($_REQUEST['secret_key']); //this is sent in the query string
if ($public_key == $private_secret_key) {
// send a message back to client saying the key is verified.
}
所有这些都有效,所以基本上我很难过的是下面的等式是如何有效的?我错过了图片的哪一部分?
55d5d22ab70d2 == 55d0ec3f9db414.02268045
更新 - 我已经执行了这个测试,它回显了错误,我猜这很明显。
echo '55d0ec3f9db414.02268045' === '55d5d22ab70d2' ? 'true' : 'false';
【问题讨论】:
-
@MarkBaker 如果您要比较两个不同类型的变量,则只有丢失比较和严格比较之间存在差异。
-
我猜公钥和私钥被用作签名消息的密钥,它们不打算进行比较。公钥/私钥身份验证系统的工作方式是,公钥加密消息,仅私钥加密消息并解密消息。因此,任何人都可以向您发送消息,但只有您可以阅读它们(从而证明您的身份)。
-
@Halcyon 我试图理解你所说的,但插件中没有消息加密或任何其他类型的加密。
-
由于您正在处理许可证,我认为您不需要公钥和私钥。一个秘密的共享密钥就足够了。
-
我认为你是对的。您能否详细说明您的概念作为答案,并可能提供一个伪代码示例。
标签: php wordpress key licensing license-key