从 Java 中的路径内容创建 MD5 散列

Create a MD5 hash from the contents of a path in Java

我想创建一个程序,它根据路径的输入生成 MD5 哈希。下面的代码仅根据路径名称创建哈希。如何从路径输入生成 MD5 哈希?谢谢!

public static void main (String[]args) {
    Scanner sc = new Scanner(System.in);
    
    
    String path = sc.next();
    System.out.println("MD5: "+MD5(path)); //Methode MD5 auf "path" angewandt
}

public static String MD5(String input) {
    
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(input.getBytes());
        BigInteger number = new BigInteger (1, messageDigest);
        String hashtext = number.toString(16);
        while (hashtext.length()<32) {
            hashtext = "0" + hashtext;
        }
        return hashtext;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    
}

您可以使用以下方式读取文件内容:

String filepath = "" ; // the full path from system.in
byte[] content = Files.readAllBytes(Paths.get(filepath));

之后,你可以得到这个字节数组的散列:

public static byte[] MD5(byte[] data) {
    try {
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        messageDigest.update(data);
        return messageDigest.digest();
    }
    catch(Exception e){
        // any processing
    }
}

为了显示二进制内容(字节数组)或将其作为字符串发送,您可以使用任何 base-16/32/64 编码安全地转换它:

String hashString = Base64.getEncoder().encodeToString(bytesArray);

所以最终代码可能是:

import java.nio.file.*;
import java.util.*;
import java.security.*;

public class Demo {
    public static void main (String[]args) throws Exception {
        Scanner sc = new Scanner(System.in);
        String path = sc.nextLine(); // read all the string from keyboard
        
        byte[] content = Files.readAllBytes(Paths.get(path));
        byte[] hash = MD5(content);
        
        String hashString = Base64.getEncoder().encodeToString(hash);
        System.out.println("MD5: "+ hashString); 
    }
    
    public static byte[] MD5(byte[] data) throws Exception{
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        messageDigest.update(data);
        return messageDigest.digest();
    }    
}