PHP替代" PBKDF2WithHmacSHA256"来自Java

时间:2017-09-26 14:50:15

标签: php sha256 hmac pbkdf2

我需要在PHP中生成与在Java中生成的val df_attack = df .withColumn("attack", when($"sender_ip_1" === "10.0.0.3" and ($"time_stamp_0").cast(TimestampType) > "07:19:00.005788", 0) .otherwise(1)) 算法相同的哈希值。

我做了一些研究,发现两个函数似乎与PBKDF2WithHmacSHA256PBKDF2有关:

我应该使用哪些PHP函数?甚至可以使用本机PHP函数吗?

编辑#1

我的Java代码,我需要在PHP中实现相同的结果

HMAC

1 个答案:

答案 0 :(得分:1)

您提供的Java代码基本上是hash_pbkdf2()。你只需要传递正确的参数:

function derivateKey($password, $salt, $iterations, $keyLengthBits)
{
    return hash_pbkdf2(
        'sha256',
        $password,
        $salt,
        $iterations,
        $keyLengthBits / 8,
        true
    );
}

显然,PHP的hash_pbkdf2()接受哈希算法作为参数,但可能存在一些棘手的差异:

  • 它不符合RFC 2898,因为其长度在十六进制编码后应用,因此必须将最后一个参数设置为true才能使其成为符合规范。
  • 它接受输出长度(以字节为单位)而不是位(因此我们将上面的值除以8)。

我唯一不确定的是key.getEncoded()在您的示例代码中的作用......没有指定任何编码算法。
我发现一些文档暗示它应该是RAW,所以我提供的例子应该匹配它。如果它没有,你必须自己编码。