gpt4 book ai didi

PHP - Web 服务的加密和签名创建

转载 作者:行者123 更新时间:2023-12-04 05:24:34 25 4
gpt4 key购买 nike

我需要用 PHP 创建一个“ key ”才能使用 Web 服务,但这对我来说意义不大。

该 Web 服务已显示可与 C# 应用程序一起使用,但我需要通过 PHP 访问它。

为了使用该服务,我需要一个“ secret key ”,然后是基于该 key 的身份验证签名。

我尝试过的一切只是从 Web 服务中抛出错误。

对于“秘钥”,简述为:

  • ASCII 编码纯文本密码
  • 使用 MD5 散列编码的密码
  • 获取 MD5 哈希字节并执行按位操作 ‘& 127’
  • 转换为 base64 字符串

  • 我不清楚第 3 点 - 其余的非常简单;我在这里错过了什么?

    然后生成身份验证签名的摘要是:
  • secret key 的UTF-8编码( secret 访问 key 是第4步的结果)
  • UTF-8 日期编码
  • HMAC-SHA1(UTF-8-Encoding-Of( secret 访问 key ,RequestDate))
  • Base 64 字符串

  • 同样,我在上面看不到任何问题 - 这只是第 3 点让我感到困惑。

    任何指针?

    最佳答案

    It's point 3 that's unclear to me - the rest is pretty straight forward; what am I missing here?



    您描述的签名算法远非安全。你最好使用 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 .

    为什么会有人这样做?

    具体来说:

    Get MD5 hash bytes and perform bit wise operation ‘& 127’



    在 Java 中,字节的范围可以从 -128127 .使用 & 127运算符清除较高位,将可能值的范围缩小到 [0, 127]。

    我怀疑答案是“懒惰的编程”。也就是说,有人想要快速解决 Java 和 PHP 之间的差异,并清除 MD5 哈希的每个字节的高位使他们不必将 [128, 255] 范围内的数字转换为 [-128, -1]。

    如果此 Web 服务仍然存在,您应该向他们询问最新的安全审核结果。

    关于PHP - Web 服务的加密和签名创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347930/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com