鉴于此工作流程:
服务器A.
>用户进行身份验证.
>用户使用共享密钥购买随机生成的唯一优惠券代码,以使用服务器B上的应用程序.
服务器B.
>用户进行身份验证.
>用户输入优惠券代码.
>服务器B使用共享密钥验证代码是否合法
>服务器B授予对应用程序的访问权限.
我需要一种在PHP中实现函数generateVoucherCode和validateVoucherCode的方法,如下所示:
服务器A.
$voucher = generateVoucherCode("someSharedSecret");
服务器B.
$isValid = validateVoucherCode($userInputtedCode, "someSharedSecret");
if($isValid) {
// allow access to application
}
最佳答案 通过共享秘密验证合法性是
HMACs的用途.您可以通过
hash_hmac
在PHP中生成HMAC.您的工作流程将是:
>服务器A生成一次性代码(以您想要的任何方式)并计算其HMAC.该对代码HMAC作为凭证代码提供给用户.
>用户向服务器B提供凭证.
>服务器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';
}