SHA1 хэш массива структур в Swift - PullRequest
0 голосов
/ 27 сентября 2019

Мне нужно создать хеш SHA1 для массива пользовательских структур в Swift.Приложение получает массив из внешнего источника через определенные промежутки времени.Цель состоит в том, чтобы определить, изменились ли данные после последнего обновления, без полной копии данных.

Как я могу это сделать?

struct Person {
    let firstName: String
    let lastName: String
}

let people = [
    Person(firstName: "John", lastName: "Appleseed"),
    Person(firstName: "Mike", lastName: "Doe")
]

// Produce an SHA1 digest of `people` here?

1 Ответ

1 голос
/ 27 сентября 2019

Одним из способов сделать это может быть использование JSON с отсортированными ключами:

struct Person: Encodable {
    let firstName: String
    let lastName: String
}

let people = [
    Person(firstName: "John", lastName: "Appleseed"),
    Person(firstName: "Mike", lastName: "Doe")
]

let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
let data = try! encoder.encode(people)

var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
data.withUnsafeBytes { ptr in
    CC_SHA1(ptr.baseAddress, CC_LONG(data.count), &digest)
}
...