Re: [心得][.NET] GetHashCode()

楼主: AmosYang (泛用人型编码器)   2016-11-27 03:11:03
重构了这篇文章,拆开成几个小题目来谈、排版、整理后续讨论,应该在可读性上
有进步。
值得一提的是新加入的这篇文
* C# `System.Valuetype.GetHashCode()` 潜在效能、安全问题
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode-valuetype.html
ValueType 的 `GetHashCode() 默认实作是把所有字段(field) 大锅炒成
杂凑(hash)值;有看过些说法主张这可能造成潜在的效能问题外,然而,更严
重的 是如其原码注解 所指出的,这多少会在某种程度上把敏感资讯透露出去
,也就是有 **潜在的安全问题** 。
https://github.com/dotnet/coreclr/blob/release/1.1.0/src/vm/comutilnative.cpp#L2770-L2774
// The default implementation of GetHashCode() for all value types.
// Note that this implementation reveals the value of the fields.
// So if the value type contains any sensitive information it should
// implement its own GetHashCode().
FCIMPL1(INT32, ValueTypeHelper::GetHashCode, Object* objUNSAFE)
是故,原码注解主张
若此 value type 含有敏感资讯,那它应该为 GetHashCode() 提供自己
的实作版本。
然而,很遗憾的, System.Valuetype.GetHashCode() 的官方文件
目前(2016-11-25)并没有特别提醒这件事。
更进一步的原始码追踪可参考这篇
* C# `GetHashCode()` 原始码
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode-source-code.html
:)
========================================================================
* 列表: http://www.30abysses.com/TWY/2016/11/21/index.html
* C# `GetHashCode()`
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode.html
* C# `GetHashCode()` 简单来说就是……
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode-explained.html
* C# `GetHashCode()` 起源、守则、法则
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode-origin-guidelines-rules.html
* C# `GetHashCode()` 讨论
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode-discussion.html
* C# `GetHashCode()` 原始码
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode-source-code.html
* C# `System.Valuetype.GetHashCode()` 潜在效能、安全问题
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode-valuetype.html
* C# `GetHashCode()` 系列文之缘起
http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode.meta.html
作者: james732 (好人超)   2016-11-27 14:22:00
不过有可能从标准实作算出的hash去倒推特定的资料吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com