是否有类似于JAVA SecretKeyFactory的PHP来创建登录系统?

是否有类似于JAVA SecretKeyFactory的PHP来创建登录系统?,java,php,mysql,sha1,salt,Java,Php,Mysql,Sha1,Salt,(这是我在这里的第一篇帖子。) 我正在编写一个minecraft服务器网站,我想建立一个登录系统。 我的minecraft服务器(BungeeCord)正在使用“BungeeAuth”要求玩家为其帐户设置密码 BungeeAuth的密码存储在我的Mysql服务器中,有两个主列:“playername”和“password” 我希望能够使用此密码登录我的网站 密码被彻底地散列了。我决定反编译“BungeeAuth”,看看它是如何工作的 这是图书馆: import java.math.BigInte

(这是我在这里的第一篇帖子。)

我正在编写一个minecraft服务器网站,我想建立一个登录系统。 我的minecraft服务器(BungeeCord)正在使用“BungeeAuth”要求玩家为其帐户设置密码

BungeeAuth的密码存储在我的Mysql服务器中,有两个主列:“playername”和“password”

我希望能够使用此密码登录我的网站

密码被彻底地散列了。我决定反编译“BungeeAuth”,看看它是如何工作的

这是图书馆:

import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
代码如下:

public boolean validatePassword(String originalPassword, String storedPassword)
        throws NoSuchAlgorithmException, InvalidKeySpecException {
    String parts[] = storedPassword.split(":");
    int iterations = Integer.parseInt(parts[0]);
    byte salt[] = fromHex(parts[1]);
    byte hash[] = fromHex(parts[2]);
    PBEKeySpec spec = new PBEKeySpec(originalPassword.toCharArray(), salt, iterations, hash.length * 8);
    SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    byte testHash[] = skf.generateSecret(spec).getEncoded();
    int diff = hash.length ^ testHash.length;
    for (int i = 0; i < hash.length && i < testHash.length; i++) {
        diff |= hash[i] ^ testHash[i];
    }

    return diff == 0;
}

private static byte[] fromHex(String hex)
        throws NoSuchAlgorithmException {
    byte bytes[] = new byte[hex.length() / 2];
    for (int i = 0; i < bytes.length; i++) {
        bytes[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
    }

    return bytes;
}
public boolean validatePassword(字符串原始密码、字符串存储密码)
抛出NoSuchAlgorithmException、InvalidKeySpecException{
字符串部分[]=storedPassword.split(“:”);
int迭代次数=整数.parseInt(部分[0]);
字节salt[]=fromHex(第[1]部分);
字节哈希[]=fromHex(第[2]部分);
PBEKeySpec spec=新的PBEKeySpec(originalPassword.toCharArray(),salt,iterations,hash.length*8);
SecretKeyFactory skf=SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”);
字节testHash[]=skf.generateScret(spec.getEncoded();
int diff=hash.length^testHash.length;
for(int i=0;i
我了解到salt是随机的,密码加密在SHA1(PBKDF2WithHmacSHA1)

PHP中是否有任何函数可以执行相同的操作?
我试过hash_hmac('sha1',…,$salt),但似乎不一样。

你能在你的数据库中发布一个hash密码吗??顺便说一下,根据关于SecretKeyFactory的java文档,它使用DES加密算法。mdp是“ExampleMDP”。在我的数据库中,我得到:1000:5B424037396239353316666:B71C3174CEBBDAAE3EAA1136BF691C1D53E36908F78FA821010DF9B0C1A6BB34F175CE95B18AA4B468FF22B958D4FF8F13C54BB9DBD19DFB055B5035565DE29 SQL:插入
BungeeAuth
id
playername
password
密码
type
)值(2,'pseudo',1000:5B424037396239353316666:b71c3174cebbdaae3eaa1136bf691c1d53e36908f78fa821010df9b0c1a6bb34f175ce95b18aa4b468ff22b958d4ff8f13c54bb9dbd19dfb055b5e503565de29',1);您使用什么函数生成盐?