【问题标题】:PBKDF2 algorithm for both Java and PHP适用于 Java 和 PHP 的 PBKDF2 算法
【发布时间】:2019-12-10 08:43:32
【问题描述】:

我有一个网站。本网站使用 PBKDF2 进行用户密码加密。我必须用 Java 编写登录代码。我用谷歌搜索了 Java 的 PBKDF2 算法。但是,Java 和 PHP 的结果不同。

Java 代码是

import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import java.util.Base64;

public class Hash {
    public static void main(String[] args) throws Exception {
        var password = "test".toCharArray();
        var salt = Base64.getDecoder().decode("JvCjRQb/9X8rticKJrDP1uvBCDTz2WEF");
        var iterationCount = 12000;
        var keyLength = 24 * 8;
        System.out.println(Base64.getEncoder().encodeToString(SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256")
                .generateSecret(new PBEKeySpec(password, salt, iterationCount, keyLength))
                .getEncoded()));
    }
}

结果:dvxvBMpmR6i4D9f1orGx9zUjH9cyv0sM (BellSoft Java 13)

PHP代码是

<?php
    $algo = "sha256";
    $password = "test";
    $salt = "JvCjRQb/9X8rticKJrDP1uvBCDTz2WEF";
    $count = 12000;
    $key_length = 24;
    echo base64_encode(hash_pbkdf2($algo, $password, $salt, $count, $key_length, true));
?>

结果:n7znKl8FBPH4ZPbZxPRHPf7vkey+5R2Y (PHP v7.2.24)

我无法编辑 PHP 代码,因为它是框架代码。因此,我需要更改 Java 代码以匹配 PHP 结果。如何更改我的 Java 代码?

【问题讨论】:

    标签: java php pbkdf2


    【解决方案1】:
    function derivateKey($password, $salt, $iterations, $keyLengthBits)
    {
    return base64_encode(hash_pbkdf2(
        'sha256',
        $password,
        base64_decode($salt),
        $iterations,
        $keyLengthBits/8,
        true
    ));
    }
    

    原创想法在这里https://stackoverflow.com/a/46430311/934967

    【讨论】:

      猜你喜欢
      • 2016-07-01
      • 2023-03-16
      • 2019-06-15
      • 2013-09-14
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      相关资源
      最近更新 更多