#swift #generics #hash #sha256 #sha
#быстрый #дженерики #хэш #sha256 #ша
Вопрос:
Я пытаюсь получить только хэш, SHA256.hash(data:)
но для того, чтобы сделать это, мне нужно получить описание, а затем использовать .replacingOccurrences(of: "SHA256 digest: ", with: "")
. Есть ли способ, которым я могу просто получить полный хэш SHA256 в виде строки?
func getId<T>(input: T) -> String {
let input = "(input)".utf8
let data = Data(input)
let hash = SHA256.hash(data: data).description.replacingOccurrences(of: "SHA256 digest: ", with: "")
return hash
}
Ответ №1:
Вы можете просто сопоставить SHA256Digest
байты в шестнадцатеричную строку:
import CryptoKit
extension UnsignedInteger where Self: CVarArg {
var hexa: String { .init(format: "%ll*0x", bitWidth / 4, self) }
}
extension DataProtocol {
var sha256Digest: SHA256Digest { SHA256.hash(data: self) }
var sha256Data: Data { .init(sha256Digest) }
var sha256Hexa: String { sha256Digest.map(.hexa).joined() }
}
func getId<D: DataProtocol>(data: D) -> String {
data.sha256Hexa
}