gpt4 book ai didi

ios - 同一个对象哈希不同,Swift,Hashable

转载 作者:行者123 更新时间:2023-11-28 11:27:18 31 4
gpt4 key购买 nike

Hashable 内部我们可以看到:

/// Hash values are not guaranteed to be equal across different executions of
/// your program. Do not save hash values to use during a future execution.

为什么会这样?每次运行都为同一个对象获取不同的哈希让我感到困惑,因为在大学里我研究过 hash function 为同一个对象返回相同的值。 Apple 使用什么算法进行哈希处理?

E.G.(这将在每次运行时打印不同的值)

struct HashTesting: Hashable {
var a = 10
var b = 20
var str = "str"
}

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

let obj = HashTesting(a: 10, b: 10, str: "str")
print("\(obj.hashValue)")
}
}

最佳答案

随着 SE 0206 Hashable Enhancements 的实现,Swift 4.2 强制执行哈希随机化。 .来自提案:

However, Hasher may generate entirely different hash values in other executions, even if it is fed the exact same byte sequence. This randomization is a critical feature, as it makes it much harder for potential attackers to predict hash values. Hashable has always been documented to explicitly allow such nondeterminism.

此外,它允许在 Swift 标准库中更改(例如改进)实际实现,而不会破坏兼容性。

为了调试目的,可以通过定义值为 1 的 SWIFT_DETERMINISTIC_HASHING 环境变量来禁用散列随机化。

可以在开源存储库中找到 Swift 标准哈希器的实现:

它基于SipHash .

关于ios - 同一个对象哈希不同,Swift,Hashable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57817954/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com