4

鉴于此工作流程:

服务器 A

  1. 用户进行身份验证。
  2. 用户使用共享密钥购买随机生成的唯一凭证代码,以使用服务器 B 上的应用程序。

服务器 B

  1. 用户进行身份验证。
  2. 用户输入优惠券代码。
  3. 服务器 B 使用共享密钥验证代码是否合法
  4. 服务器 B 授予对应用程序的访问权限。

我需要一种 PHP 方法来实现这些功能generateVoucherCodevalidateVoucherCode如下所示:

服务器 A

$voucher = generateVoucherCode("someSharedSecret");

服务器 B

$isValid = validateVoucherCode($userInputtedCode, "someSharedSecret");
if($isValid) {
    // allow access to application
}
4

1 回答 1

2

通过共享秘密验证合法性是HMAC的用途。您可以通过hash_hmac. 您的工作流程将是:

  1. 服务器 A 生成一次性代码(以您想要的任何方式)并计算其 HMAC。这对代码 + HMAC 作为凭证​​代码提供给用户。
  2. 用户向服务器 B 出示凭证。
  3. 服务器 B 将一次性代码从凭证中分离出来,并使用共享密钥独立计算其 HMAC。如果计算的 HMAC 与凭证中的 HMAC 匹配,则凭证是真实的。

凭证生成示例:

$secret = '$uper$ecret$tring';
$code = 'a pet unicorn';
$voucher = $code.'/'.hash_hmac('sha512', $code, $secret);

echo 'Your voucher is '.$voucher';

凭证验证示例:

$secret = '$uper$ecret$tring';
list ($code, $hmac) = explode('/', $voucher);
$verify_hmac = hash_hmac('sha512', $code, $secret);
if ($hmac === $verify_hmac) {
    echo 'Your voucher can be redeemed for '.$code';
}
else {
    echo 'Invalid voucher, sorry';
}
于 2013-08-13T21:05:52.733 回答