【发布时间】:2015-12-04 23:43:45
【问题描述】:
第一个程序应该接受两个输入作为参数:directory1 和 directory2。程序应为文件夹目录 1 中的每个文件计算一个哈希值(使用 HMAC),并将该哈希值存储在一个新文件中,该文件将保存在文件夹目录 2 下。 (b)。第二个程序应该执行验证过程。它也采用与第一个程序相同的两个输入参数。它应该再次生成哈希(您可以在此处重用第一个程序中的一些代码)并检查它们是否与存储在 directory2 中的相应值匹配。对于每个文件,此程序应输出两个字符串:文件名和 YES/NO(表示哈希是否匹配)
我做了一些工作,将从一个文件夹生成单个文件的哈希值,我需要帮助来生成该文件夹中所有文件的哈希值,这些代码如下。
功能
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.security.MessageDigest;
public class HMAC {
public static void main(String args[]) throws Exception {
String datafile = "/Users/Samip/Desktop/crypto1";
MessageDigest md = MessageDigest.getInstance("SHA1");
FileInputStream fis = new FileInputStream(datafile);
byte[] dataBytes = new byte[1024];
int nread = 0;
while ((nread = fis.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
};
byte[] mdbytes = md.digest();
//convert the byte to hex format
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < mdbytes.length; i++) {
sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
}
//System.out.println("SHA-1 value is :: " + sb.toString());
FileWriter file = new FileWriter("/Users/Samip/Desktop/crypto/output.txt");
PrintWriter output = new PrintWriter(file);
output.println(sb.toString());
output.close();
System.out.println(sb.toString());
}
}
我希望有人可以帮助我。
【问题讨论】:
-
到底是什么?请提出问题。
-
我想生成一个文本文件,其中包含特定文件夹中所有随机文件的所有哈希值。我有一个用于单个文件的功能,我需要为整个文件夹实现它。
-
因此,对于每个文件,您都希望将一个哈希写入文件。而且您已经有了 one 文件的代码。而 File.listFiles() 可以列出一个目录中的所有文件。那么您面临的确切问题/错误/问题在哪里?
-
我需要为所有文件生成哈希,我只知道如何为一个文件生成。
-
字符串数据文件一次只能选择一个文件需要一些帮助来选择整个文件夹。