[英]The value of hash_hmac sha256 has different value using different post procedures
我做了两种请求 POST 的方法。 方法 1 是将表单提交到服务器。 方法 2 使用 Jquery $.post。
<!--METHOD 1-->
<form method="POST" action="postmanTest.php" id="#myform">
<input type="hidden" id ="bodyv" name="bodyv" value="aaab">
<input type="hidden" id ="time" name="time">
<input type="submit" value="Submit Now" id="btn2" name="submit" onclick="stringify()">
</form>
<button id = "btn3">Set TIme</button>
<script>
//---METHOD 2---
$("#btn2").click(function(){
stringify();
$bodyv=$("#bodyv").val();
$.post("postmanTest.php",
{bodyv:$bodyv},
function(data,status){
alert(data);
}
)
})
//---SET TIME---
$("#btn3").click(function(){
document.getElementsByName('time')[0].value = new Date().getTime();
})
</script>
字符串化 function
<script type="text/javascript">
function stringify(){
let time = document.getElementsByName('time')[0].value;
let body = {
"data": {
// "scheduleAt": "2022-04-01T14:30:00.00Z", // optional
"serviceType": "MOTORCYCLE",
//"specialRequests": ["TOLL_FEE_10"], // optional
"specialRequests": ["CASH_ON_DELIVERY"], // optional
"language": "en_PH",
"stops": [
{
"coordinates": {
"lat": "0",
"lng": "0"
},
"address": "Innocentre, 72 Tat Chee Ave, Kowloon Tong"
},
{
"coordinates": {
"lat": "0",
"lng": "0"
},
"address": "Canton Rd, Tsim Sha Tsui"
}
],
"isRouteOptimized": false, // optional only for quotations
"item":{
"quantity":"12",
"weight":"LESS_THAN_3_KG",
"categories":[
"FOOD_DELIVERY",
"OFFICE_ITEM"
],
"handlingInstructions":[
"KEEP_UPRIGHT"
]
},
}
};
body = JSON.stringify(body);
document.getElementsByName('bodyv')[0].value = `${time.toString()}\r\nPOST\r\n/v3/quotations\r\n\r\n${body}`;
}
服务器端 PHP 代码接受变量并将 hash_hmac sha256 应用于 bodyv 变量
<?php
$bodyVar = $_POST['bodyv'];
$secret = "mysecretkey";
$sig = hash_hmac('sha256', $bodyVar, $secret);
echo $sig;
方法 1 和方法 2 为 $sig = hash_hmac('sha256', $bodyVar, $secret) 生成不同的值。 为什么会这样? 方法 1 是正确的 hash 值。
经过研究,我看到您正在使用\r\n
来设置$bodyv
数据。 当您使用$bodyv = $("#bodyv").val()
获取该数据时, \r
被剥离。 那是因为val()
去除了回车符,如此处所述。 您可以更改为 $bodyv = $("#bodyv")[0].value;` 它将按预期工作
编辑以匹配正确答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.