gpt4 book ai didi

java - 为什么我的两种 MD5 哈希方法会产生不同的哈希值?

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:28 29 4
gpt4 key购买 nike

我是java新手,确实需要一些帮助。我创建了一个命令行工具来获取文件的 MD5 哈希值。这很有效,所以我定制了我的代码,将其放入 GUI 形式。这两个程序给出了同一文件的不同哈希值,这令人困惑。我研究过 UTF-8,但据我所知,它仅适用于字符串,不适用于文件实例。谁能告诉我为什么他们提供不同的哈希值并指出我正确的方向?

第一种方法(命令行)...

    public static void main(String args[]) throws IOException, NoSuchAlgorithmException {

System.out.println("Please enter file path: \n");

BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String dir = stdin.readLine();
File file = new File(dir);

FileInputStream iStream = null;

try {iStream = new FileInputStream(file);}
catch (FileNotFoundException e) {
String MD5Output = "There has been an error: " + e.toString();
}

byte[] dataBytes = new byte[1024];

MessageDigest md = MessageDigest.getInstance("MD5");

int numRead = iStream.read(dataBytes);
md.update(dataBytes, 0, numRead);

iStream.close();

dataBytes = md.digest();

md.update(dataBytes);
System.out.println("MD5: " + new BigInteger(1, md.digest()).toString(16));

}

第二种方法(为 GUI 构建)...

    public void doMD5() throws IOException, NoSuchAlgorithmException {

File file = new File(jTxtMD51.getText());

FileInputStream iStream = null;

try {iStream = new FileInputStream(file);}
catch (FileNotFoundException e) {
String MD5Output = "There has been an error: " + e.toString();
}

byte[] dataBytes = new byte[1024];

MessageDigest md = MessageDigest.getInstance("MD5");

int numRead = iStream.read(dataBytes);
md.update(dataBytes, 0, numRead);

iStream.close();

byte[] MD5checksum = md.digest();

md.update(dataBytes);

BigInteger bigInt = new BigInteger(1, md.digest());
String MD5Hash = bigInt.toString(16);

jTextOutput.append("MD5 is : " + MD5Hash);

}

最佳答案

您只从流中进行一次读取调用。读取 InputStream 时需要循环(假设您想读取整个内容,这通常是您想要的)。此外,您似乎使用相同的字节对digest.update()进行了两次调用。

此外,通常在打印哈希值时,由于它是二进制值,因此会使用 base64 编码打印。

关于java - 为什么我的两种 MD5 哈希方法会产生不同的哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829126/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com