【发布时间】:2021-06-06 07:59:12
【问题描述】:
我想计算图像的哈希值,首先我将图像转换为数据,然后在此函数的帮助下我将计算图像文件(数据)的哈希值,但生成的哈希值与在线生成器和其他语言不匹配像(Java)这样的转换器,即使我尝试了其他库,但我得到了相同的结果,我认为当我转换为数据时,我的文件发生了一些事情,所以哈希与其他转换器不匹配。
但是当我计算纯文本哈希时,它与所有在线转换器和其他语言转换器匹配 但是和Image不一样?
感谢您的帮助
func md5(url: URL) {
let bufferSize = 1024*1024
do {
let file = try FileHandle.init(forReadingFrom: url)
defer {
file.closeFile()
}
var context = CC_MD5_CTX.init()
CC_MD5_Init(&context)
while case let data = file.readData(ofLength: bufferSize), data.count > 0 {
data.withUnsafeBytes { (poiner) -> Void in
_ = CC_MD5_Update(&context, poiner, CC_LONG(data.count))
}
}
// Calculate the MD5 summary
var digest = Data(count: Int(CC_MD5_DIGEST_LENGTH))
digest.withUnsafeMutableBytes { (pointer) -> Void in
_ = CC_MD5_Final(pointer, &context)
}
let result = digest.map { (byte) -> String in
String.init(format: "%02hhx", byte)
}.joined()
print("result: \(result)")
} catch let error as Error {
print("calculation error: \(error.localizedDescription)") // Where is the try, where is the error?
}
}
【问题讨论】:
-
应该可以 - 你确定你有正确的文件吗?
-
是的,我将 png 图像转换为数据并使用 2 个不同的库计算哈希,我会得到相同的结果,但是在线转换器和终端我会收到不同的哈希
-
展示如何将 png 转换为数据。注意 png != data ... 有可能不同的 cmets 和其他元数据。如果 url = original png 这应该有效
-
让 image = UIImage(named: "aaaaaaaaa")?.pngData().但我没有得到你关于 url 的内容
-
我的意思是,在您的代码中,如果您使用 xxx 调用
md5 ( url : xxx )原始图像,它应该可以工作。pngData()将产生省略或添加元数据的数据,因此!= 其他 md5 操作的文件数据。
标签: ios objective-c swift iphone md5