如何在java中找到php md5(sha1(“test”)

如何在java中找到php md5(sha1(“test”),java,php,Java,Php,在我现有的系统中,我使用以下php算法对密码进行哈希运算 $userId = "testusername"; $password = "testpassword"; echo md5(sha1($userId).sha1($password)); 对于上述内容,Java中的等效方法是什么,因为我正在将php迁移到Java 当我尝试在谷歌搜索时,他们正在谈论MessageDigest方法。 在PHP中,我使用了inbuild md5()和sha1()函数 在java中,我发现了以下内容,但仍然不

在我现有的系统中,我使用以下php算法对密码进行哈希运算

$userId = "testusername";
$password = "testpassword";
echo md5(sha1($userId).sha1($password));
对于上述内容,Java中的等效方法是什么,因为我正在将php迁移到Java

当我尝试在谷歌搜索时,他们正在谈论MessageDigest方法。 在PHP中,我使用了inbuild md5()和sha1()函数

在java中,我发现了以下内容,但仍然不是等价的

   public static String sha1(String input) {
    StringBuilder sb = null;
    try{
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        md.reset();
        md.update(input.getBytes());
        byte[] bytes = md.digest();
        sb = new StringBuilder();
        for(int i=0; i< bytes.length ;i++)
        {
            sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
        }
    }catch(RuntimeException | NoSuchAlgorithmException e){
        throw new RuntimeException(e.getMessage());
    }
    return sb.toString();
}

public static String md5(String input) {

    StringBuilder sb = null;
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(input.getBytes());
        byte[] bytes = md.digest();
        sb = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
        }
    } catch (RuntimeException | NoSuchAlgorithmException e) {
        throw new RuntimeException(e.getMessage());
    }
    return sb.toString();
}
公共静态字符串sha1(字符串输入){
StringBuilder sb=null;
试一试{
MessageDigest md=MessageDigest.getInstance(“SHA-1”);
md.reset();
md.update(input.getBytes());
byte[]bytes=md.digest();
sb=新的StringBuilder();
for(int i=0;i

}

您可以尝试以下示例:

class Main {
    public static void main(String[] a) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        String output, input = "ml";
        MessageDigest md = MessageDigest.getInstance("md5");
        byte[] digest = md.digest(input.getBytes("UTF-8"));
        BigInteger bigInt = new BigInteger(1, digest);
        output = bigInt.toString(16);
        System.out.println(""+output);
    }
}
同样,您也可以生成sha1,只需在
MessageDigest.getInstance()中传递
“sha1”
功能。

sha1($userId)+sha1($password)
完全错误。要在PHP中进行字符串连接,您需要
sha1($userId).sha1($password)

您在PHP中看到的结果实际上是
md5(8)
c9f0f895fb98ab9159f51fd0297e236d
。这是因为
$password
的SHA1以8开头。散列的其余部分被扔掉了


这不能用作安全哈希函数,因为冲突太多。例如,
12345
的密码具有相同的哈希值。您应该要求用户重置密码,并改用标准密码哈希机制。

在我现有的系统中,我用php中的以下算法对密码进行哈希。
糟糕!糟糕!为什么您认为sha1()和mda5的组合是安全的;为什么您认为它比PHP的内置/?更好?这会产生与问题中相同的输出。Java部分是正确的。错误的是PHP示例。