如何在 PHP 中正确生成 WSSE 密码摘要

dra*_*ank 1 php base64 sha1 symfony wsse

我正在考虑在 Symfony2 中构建 REST API,并且在他们的自定义身份验证提供程序中,他们展示了如何构建 WSSE 身份验证系统,这对于我需要做的事情应该没问题。我将首先通过 cURL 构建和测试 API,因此我需要能够快速生成标头。我找到了一个JS 生成器,它显示了我需要的标题。

从我读到的内容来看,密码摘要应该是按顺序连接在一起的随机数、时间戳和用户密码的 base64 编码的 SHA1。我从以下数据开始:

$nonce = '4c5625ec7af5bdff';
$timestamp = '2013-04-03T04:46:19Z';
$password = 'mypass';
Run Code Online (Sandbox Code Playgroud)

并生成摘要:

$digest = base64_encode(sha1($nonce.$timestamp.$password));
Run Code Online (Sandbox Code Playgroud)

我不明白的是$digest变量现在设置为YTgxMDUzOWQzMDBiZmU1MmI2NWQ0YjYwNDc3ZmY5OWI3MmVlZTQyNA==,但是来自 JS 生成器的示例 PasswordDigest 显示为qBBTnTAL/lK2XUtgR3/5m3Lu5CQ=. 我一定在某处遗漏了一步,但我不确定它是什么。

dra*_*ank 6

看起来我需要使用二进制 SHA1 结果,而不是十六进制表示。我的摘要应如下所示:

$digest = base64_encode(sha1($nonce.$timestamp.$password, true));
Run Code Online (Sandbox Code Playgroud)