如何使用SHA256获得与JAVA和CryptoJS相同的结果?

时间:2016-03-25 06:22:28

标签: javascript java hash sha256 cryptojs

我正在尝试使用CryptoJs在javascript中使用Java生成相同的结果。但我很多次失败了。我发现CryptoJs最近在javascript中生成哈希值。但是在javascript和java之间做出相同的结果是不合适的。我想从zip或xls,doc获取哈希值(校验和)。 Java应用程序必须检查它是否具有相同的哈希值。有谁知道我的javascript出了什么问题?

====== java source ==========

public static String getFileHashSHA256(String fileName) throws Exception {

    int buff = 16384;

    RandomAccessFile file = new RandomAccessFile(fileName, "r");
    MessageDigest hashSum = MessageDigest.getInstance("SHA-256");

    byte[] buffer = new byte[buff];
    byte[] partialHash = null;

    long read = 0;

    long offset = file.length();
    int unitsize;

    while (read < offset) {

        unitsize = (int) (((offset - read) >= buff) ? buff : (offset - read));
        file.read(buffer, 0, unitsize);

        hashSum.update(buffer, 0, unitsize);

        read += unitsize;
    }
    file.close();

    partialHash = new byte[hashSum.getDigestLength()];
    partialHash = hashSum.digest();

    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < partialHash.length; i++) {
        sb.append(Integer.toString((partialHash[i] & 0xff) + 0x100, 16).substring(1));
    }

    return sb.toString();

}

结果哈希值:2f3512d3caad7b43f0036bafa7c80e78e9fca6a253857d24b1c38dc5cdab1399

========= javascript source ==============

var fileToLoad = document.getElementById("fileToLoad").files[0];

var fileReader = new FileReader();
fileReader.readAsBinaryString(fileToLoad);
fileReader.onload = function(fileLoadedEvent) 
{

    var hash = CryptoJS.SHA256(fileLoadedEvent.target.result).toString();
    console.log(hash);

};

结果哈希值:cc7cf3ed59fb26a43d2596e54c48bced09ad22bff68e2cb5a1ea7cc80b48387d

即使它来自同一个zip文件,这两个哈希值也是不同的。

0 个答案:

没有答案