【问题标题】:How is this public key == private key这个公钥==私钥怎么样
【发布时间】: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


【解决方案1】:

共享密钥:

function generate_signature($message, $secret) {
     $serialized_message = serialize($message);
     return md5($serialized_message . $secret);
}

$secret = "i like pie";
$content = array(
    "i like" => "pie",
    "pancakes" => "are also nice"
);
$message = serialize(array(
    "signature" => generate_signature($content , $secret),
    "content" => $content
));

// send the message

$message = unserialize($_POST["message"]);
$signature = generate_signature($message["content"], $secret);
if ($signature === $message["signature"]) {
    echo "ok";
} else {
    echo "you don't like pie?";
}

密钥可以是许可证顺便说一句,因为这是你想要保密的。

【讨论】:

  • 我建议使用 hash_equals() 而不是 === 以增加安全性,
猜你喜欢
  • 2016-03-27
  • 2021-11-02
  • 2013-07-09
  • 2017-12-02
  • 2022-01-15
  • 2011-07-19
  • 2013-05-05
  • 2018-11-14
  • 1970-01-01
相关资源
最近更新 更多