php web服务中的校验和实现

时间:2018-01-08 05:19:24

标签: php json web-services checksum

我有用于获取JSON格式的大量数据的php Web服务。目前我正在使用发送数据和接收数据的计数比较成功案例。最近我听说称为校验和的方法。如何在这种情况下实现校验和?

1 个答案:

答案 0 :(得分:0)

您可以使用hash_hmac()使用已知密钥对有效负载进行签名,创建的令牌将使用HTTP标头传递。

例如:

<?php
// key which will sign the data 
$key = hash('sha256', 'Unique user data or Some secret');

// your data
$array = [
    'foobar' => 'baz'    
];

// encode the payload
$json = json_encode($array);

// sign it with key
$token = hash_hmac('sha256', $json, $key);

// set response header
header('X-Checksum: '.$token);

echo $json;

这是接收方验证接收数据的方式。

// faked: this would be populated by the request/response
$_POST['json'] = $json; 
$_SERVER['X-Checksum'] = $token; 

// verify the data matches token by signing the data with the key
$check = hash_hmac('sha256', $_POST['json'], $key);
if (hash_equals($token, $check)) {
    echo 'Verified';
} else {
    echo 'Tampered';
}

// example tampered data
$_POST['json'] = 'tampered'.$json; 

$check = hash_hmac('sha256', $_POST['json'], $key);
if (hash_equals($token, $check)) {
    echo 'Verified';
} else {
    echo 'Tampered';
}

在线查看:https://3v4l.org/tvUUR