如何在Java中找到PHP MD5(SHA1("test"))

  • 本文关键字:MD5 SHA1 PHP test Java java php
  • 更新时间 :
  • 英文 :


在我现有的系统中,我在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();
}

}

你可以试试下面的例子:

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 具有相同的哈希。应要求用户重置其密码,并改用标准密码哈希机制。

最新更新