我希望使用Java来获取文件的MD5校验和.我真的很惊讶,但我找不到任何显示如何获取文件的MD5校验和的内容.
怎么做?
我编写了以下程序来计算Java中字符串的SHA-256哈希值:
public class ToHash {
public static void main(String[] args) {
byte[] data = "test".getBytes("UTF8");
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(data);
System.out.println(new BASE64Encoder().encode(hash));
}
}
Run Code Online (Sandbox Code Playgroud)
嗯,这很好.在下一步中,我想以接受文件并计算其哈希值的方式开发它.我的解决方案是在字符串数组中读取整个文件,并在该字符串数组上调用该digest()方法.但是有两个问题:
我不知道如何将整个文件读入数组?目前我认为我必须逐行阅读并附加一个带有新行的数组!
以上方法需要大量文件的大量内存!
这是我当前读取文件的程序:
public class ToHash {
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException, FileNotFoundException, IOException {
// TODO code application logic here
// The name of the file to open.
String fileName = "C:\\Users\\ghasemi\\Desktop\\1.png";
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(fileName));
while …Run Code Online (Sandbox Code Playgroud) 我在java中构建了一个文件哈希方法,它接受a的输入字符串表示,filepath+filename然后计算该文件的哈希值.散列可以是任何本机支持的java散列算法,例如MD2through SHA-512.
我试图找出最后一滴性能,因为这个方法是我正在研究的项目的一个组成部分.我被建议尝试使用FileChannel而不是常规FileInputStream.
我原来的方法:
/**
* Gets Hash of file.
*
* @param file String path + filename of file to get hash.
* @param hashAlgo Hash algorithm to use. <br/>
* Supported algorithms are: <br/>
* MD2, MD5 <br/>
* SHA-1 <br/>
* SHA-256, SHA-384, SHA-512
* @return String value of hash. (Variable length dependent on hash algorithm used)
* @throws IOException If file is invalid.
* @throws HashTypeException If …Run Code Online (Sandbox Code Playgroud)