- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要签署我的亚马逊产品 API 请求,接受的代码如下。
base64_encode(hash_hmac('sha256', $request, $key, true));
这在我使用 64 位 Linux 时效果很好,但在使用 64 位 Windows 7 时失败了。有没有人知道如何调试为什么 hash_hmac 在 64 位 Linux 和 64 位 Windows 之间提供不同的输出?
测试代码:
<?php
$test = "GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06";
#echo $test;
echo base64_encode(hash_hmac('sha256', $test, '1234567890', true));
编辑 上面代码的正确输出是Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=
错误的输出是 X0UTct9XSJ/3k2gu6noyKhTlksx5ZbH4qAbCyW3zX48=
The non-base64-encoded values are 5f451372df57489ff793682eea7a322a14e592cc7965b1f8a806c2c96df35f8f
for the incorrect and 35a71ef94dc0cf83a137bb484aa82cd6f74b0470448a359c05e0aa2f9c4df718
for the correct one when converted to hex. (它是调用中的原始二进制输出)
编辑 2 我现在的猜测是,即使 Windows 7 操作系统是 64 位,PHP 二进制文件也被编译为 32 位,因为我在 php.net 网站上找不到 64 位版本。
编辑 3 实际上我现在很确定问题是二进制文件是 32 位的。 Linux 上的 PHP 很可能使用操作系统版本来计算哈希,而 Windows 上的 PHP 实现了它自己的版本,这导致了 32/64 位差异,即使两个操作系统都是 64 位。
最佳答案
恭喜,欢迎来到行尾的精彩世界。您遇到的问题是一个经典问题:*nix 中的行结尾是 \n
,而 windows 中的行结尾是 \r\n
。请尝试以下操作:
$test = "GET\n".
"webservices.amazon.com\n".
"/onca/xml\n".
"AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06";
关于PHP hash_hmac() 操作系统差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949599/
我有生成 hash_hmac 的 php 代码 $concate=array(); $validation_token = hash_hmac('md5', implode("|", $concate
我正在开发一个新的 moodle 模块,它提供与 Windows Live 的集成。 使用实时身份验证时,我得到一个空白页面。打开 PHP 错误记录并获取: Fatal error: Call to
我需要签署我的亚马逊产品 API 请求,接受的代码如下。 base64_encode(hash_hmac('sha256', $request, $key, true)); 这在我使用 64 位 Li
阅读 this excellent answer关于密码散列和想知道如何实现它: The Wicked Flea写道: Generate a nonce for each user; this alo
我想知道,有没有办法在erlang中实现hash_hmac("sha256", $token, $signkey, true) (php)? 最佳答案 看看http://erlang.org/doc/
什么是等效的: hash_hmac('sha256', 'data', 'key') 如果我使用的是 openssl_*? openssl_digest 不接受 $key 参数。 最佳答案 此函数使用
$key = "12345678876543211234567887654321"; $iv = "1234567887654321"; $plaindata = "This is a test st
我正在尝试转换这个 php 函数: string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output =
我刚刚从这个站点获得了一个函数,它描述了如何使用哈希生成安全密码。功能如下 function hash_password($password, $nonce) { global $site_key
我正在尝试为以下项目编写 python 身份验证机器人:https://comkort.com/page/private_api 没有完整的 php 示例。我猜有人可以把它放在这里。 只有一段php代
我是新来的,我有问题。 你能告诉我为什么 hex_hmac_sha1(Javascript 函数)不如 hash_hmac(PHP 函数)好吗。 如果是 A-z 字母就没问题,但其他字符就不行。 例如
我有以下 PHP 函数 public function encodePassword($raw, $salt) { return hash_hmac('sha1', $raw
我有在我的 PHP 应用程序中运行的代码。在 PHP 中,我使用以下代码对 url 进行签名: private static function __getHash($string) { ret
我在 stack-overflow 中看到了一些相同的问题,但它对我没有帮助。 我有这个 php 代码 $signature=base64_encode(hash_hmac("sha256", tri
我正在创建一个更安全的用户密码表,其中包含用户名、强随机盐和 PHP 中的加盐/散列密码,如下所示: $salt = bin2hex(openssl_random_pseudo_bytes(64));
我正在将 PHP 应用程序移植到 C++。 PHP 应用程序正在使用此函数: hash_hmac — Generate a keyed hash value using the HMAC method
我有生成 hash_hmac 的 php 代码 key = base64_encode(hash_hmac('sha1',$public_key, $private_key,TRUE)); 我已经尝试
我遇到 hash_hmac 和 AWS 签名版本 4 的问题。我正在使用他们在此处列出的示例:http://docs.aws.amazon.com/general/latest/gr/sigv4-ca
我正在移植一个php脚本到node,我对加密不是很了解。 php脚本使用了这个函数: hash_hmac('sha512', text, key); 因此,我需要在 Node js 中实现一个函数,以
这个问题在这里已经有了答案: Implementation HMAC-SHA1 in python (8 个回答) 关闭5年前。 我想将我的访问者转发到第 3 方支付网站。该第 3 方将处理他们的付款
我是一名优秀的程序员,十分优秀!