我正在计算移动设备中文件的SHA256,因此需要通过重新计算在服务器端对其进行比较。当前,在移动设备上计算出的值与在服务器上计算出的值不相同。
这是移动端的实现:
func sha256(data: Data) -> Data {
var digestData = Data(count: Int(CC_SHA256_DIGEST_LENGTH))
_ = digestData.withUnsafeMutableBytes {digestBytes in
data.withUnsafeBytes {messageBytes in
CC_SHA256(messageBytes, CC_LONG(data.count), digestBytes)
}
}
return digestData
}
....
let localHash = sha256(data: data)
photoHash = "\(localHash.map { String(format: "%02hhx", $0) }.joined())"
在服务器端,我的servlet对收到的文件执行以下操作:
FileInputStream fis = new FileInputStream(f);
String sha256 = org.apache.commons.codec.digest.DigestUtils.sha256Hex(fis);
log.debug("SHA256 "+sha256);
我确定双方共享同一个文件,但是如何计算相同的HASH值?