关于 Rust 哈希的思考

主要观点:

  • 传统语言中值的哈希方式存在问题,如整数哈希、哈希混合、输入数据随机性处理、哈希值保证、哈希函数种子等方面。
  • Rust 通过分离责任实现了更好的哈希方案,对象实现Hash trait,哈希器实现Hasher trait,但Hasher API 不适合块哈希。
  • 实际中 Rust 的内置哈希器处理方式存在问题,如对不同类型数据哈希效率差异大,无法有效利用数据结构信息等。
  • 目标是设计一种通用哈希,适用于大多数实际情况,对短输入快速,能抵抗 DoS 攻击但不一定是加密哈希。

关键信息和重要细节:

  • Python、Java、C++中值通过调用“哈希我”方法哈希,存在多种问题,如整数哈希方式不佳、哈希混合困难、数据随机性处理浪费资源等。
  • Rust 中HasherHash分离,对象将结构化数据转为整数流,哈希器将流转为数值哈希,理论上是好方案,但Hasher API 不适合块哈希。
  • 实际中 Rust 的Hasher API 对不同类型数据哈希效率差异大,如对Vec<i32>Vec<NewType>哈希效率相差 5 倍,对不同哈希器也有不同影响。
  • 提出设计通用哈希的目标,如采用特定的哈希方案,但 Rust 的哈希器设计限制了其实现,目前的HasherHash抽象存在问题,应让Hash提供自省功能,Hasher递归遍历哈希对象。
  • 指出 Java、C++、Python 的哈希方式也有问题,如对产品类型哈希优化不足, specialization 也不能有效解决哈希问题,哈希产品类型需线性化,考虑嵌套字段等。

总结:Rust 的哈希方案在理论上较好,但实际中Hasher API 不适合块哈希,导致对不同类型数据哈希效率差异大,目前的哈希抽象存在问题,需重新设计让HashHasher更好协作以实现更优的哈希效果。

阅读 5
0 条评论