首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java和PHP语言的PBKDF2算法

Java和PHP语言的PBKDF2算法
EN

Stack Overflow用户
提问于 2019-12-10 16:43:33
回答 1查看 187关注 0票数 0

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

Java代码是

代码语言:javascript
复制
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 Java13)

PHP代码是

代码语言:javascript
复制
<?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 (PHPV7.2.24)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-05 20:31:31

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59263218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档