【发布时间】:2018-11-06 06:22:52
【问题描述】:
我正在使用以下代码获取 UIImage 的 SHA 256
(来源:https://stackoverflow.com/a/50931949/10451073)
extension UIImage{
public func sha256() -> String{
if let imageData = cgImage?.dataProvider?.data as? Data {
return hexStringFromData(input: digest(input: imageData as NSData))
}
return ""
}
private func digest(input : NSData) -> NSData {
let digestLength = Int(CC_SHA256_DIGEST_LENGTH)
var hash = [UInt8](repeating: 0, count: digestLength)
CC_SHA256(input.bytes, UInt32(input.length), &hash)
return NSData(bytes: hash, length: digestLength)
}
private func hexStringFromData(input: NSData) -> String {
var bytes = [UInt8](repeating: 0, count: input.length)
input.getBytes(&bytes, length: input.length)
var hexString = ""
for byte in bytes {
hexString += String(format:"%02x", UInt8(byte))
}
return hexString
}
}
我将它用作:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let file = info[UIImagePickerControllerOriginalImage]
{
print((file as? UIImage)?.sha256())
}
self.dismiss(animated: true, completion: nil)
}
但是,我得到任何 UIImage 的 SHA 256 错误。例如,在检查此图像的 SHA 256 时 - https://drive.google.com/open?id=1p9n01qOFahr6I1Q7FPzoDCKcjLjYVivl,我得到的值是 1d6a7c377157c4511183706033898c76c090924ecbf9d47ddff7243237dc9243,而不是得到正确的值是 360cd85c64b5e672c48ef948df689a17e41b80a84b9d3d2039143e47a9473395(验证自:https://hash.online-convert.com/sha256-generator)
请帮助我了解这里出了什么问题以及我应该如何更改上述代码以获得正确的 SHA 256 值。非常感谢您的帮助。谢谢。
编辑:在与@Paulw11 在下面的回答中讨论后,我知道我需要获取文件的哈希值而不是图像。但是我不确定如何更改此代码以使其相同。请帮助我。
【问题讨论】:
-
A
UIImage不是 PNG 或 JPEG 文件;对于 PNG 和从该 PNG 创建的UIImage,您不会获得相同的哈希值。您需要对文件执行哈希,而不是UIImage