我需要使用PHP创建一个“密钥”才能使用Web服务,但这对我来说没什么意义。
Web服务已经证明可以与C#应用程序一起使用,但我需要通过PHP访问它。
为了使用该服务,我需要一个“密钥”,然后是一个基于该密钥的身份验证签名。
我尝试过的所有内容都会从网络服务中抛出错误。
对于“秘密密钥”,简介是:
第3点我不清楚 - 剩下的就是直截了当;我在这里错过了什么?
然后要生成身份验证签名,简介是:
同样,上面没有我能看到的问题 - 这只是让我失望的第3点。
任何指针?
答案 0 :(得分:3)
我不清楚这是第3点-其余的很简单。我在这里想念什么?
您描述的签名算法远非安全。最好使用Ed25519(通过sodium_crypto_sign_detached()
和sodium_crypto_sign_verify_detached()
)而不是MD5和SHA1废话。
话虽如此,他们可能期望这样的事情:
function insecureMd5Kdf($message, $raw = false)
{
$bytes = md5($message, true);
$output = '';
for ($i = 0; $i < 16; ++$i) {
$int = ord($bytes[$i]) & 127;
$output .= pack('C', $int);
}
if (!$raw) {
return bin2hex($output);
}
return $output;
}
演示here。
特别是:
获取MD5哈希字节并执行按位运算“&127”
在Java中,字节的范围可以从-128
到127
。使用& 127
运算符清除较高的位,从而将可能的值范围减小到[0,127]。
我怀疑答案是“惰性编程”。也就是说,有人希望快速解决Java和PHP之间的差异,并清除MD5哈希的每个字节的高位,从而避免了将其从[128,255]范围内的数字转换为[-128, -1]。
如果此Web服务仍然存在,则应询问他们最新的安全审核结果。