当前位置: 首页 > 知识库问答 >
问题:

为什么字符串哈希码会因. NET中的每次执行而改变?

钱欣然
2023-03-14

请考虑以下代码:

Console.WriteLine("Hello, World!".GetHashCode());

首次运行:

139068974

第二次运行:

-263623806

现在考虑用科特林写的同样的东西:

kotlin prettyprint-override">println("Hello, World!".hashCode())

首次运行:

1498789909

第二次运行:

1498789909

为什么string的哈希码每次在. NET中执行都会更改,但在JVM等其他运行时不会更改?

共有1个答案

百里骏
2023-03-14

为什么在.NET中每次执行时字符串的哈希代码都会更改

简而言之,防止哈希冲突攻击。只需引用文档:

哈希表中的字符串查找通常是O(1)运算。但是,当发生大量冲突时,查找可能变成O(n)操作。您可以使用configuration元素为每个应用程序域生成一个随机哈希算法,这反过来限制了潜在冲突的数量,特别是当计算哈希代码的密钥基于用户输入的数据时。

但是不能在其他运行时上运行,比如JVM?

不完全是,例如Python的哈希函数是随机的。Java也许这是一个历史问题,因为算术是公开的,这不好,读这个。

 类似资料:
  • 你好,所以社区我需要一些哈希专业知识: 我面临着比较两个对象列表的问题。列表的一个实例在.Net Core 2.0应用程序中,另一个在.Net 4.5.2应用程序中。 为了比较两个列表(确保它们在两个应用程序中是相同的),我想计算列表的哈希值,并在应用程序之间交换。为了计算列表的哈希值,我使用了这个答案中描述的方法。 为此,您需要列表中对象的哈希码,这就是我的问题所在:似乎众所周知的事实(1).N

  • 问题内容: 在过去的一个小时中,我已经阅读了很多文章,但是对于在Hashmap中使用不可变对象作为键的概念,我仍然不太清楚。我有一个哈希图,其键为字符串。哈希图中的值是MyStore,其中MyStore表示有关我拥有的商店的信息。字符串代表地址。在我的代码中,我拥有的逻辑是,我首先在映射中查找该键(如果存在)->获取其值,如果不存在,则将其放入哈希映射。我的经理刚刚告诉我,密钥会在将来发生变化,也

  • 问题内容: 我有一个要哈希的字符串。在node.js中生成哈希的最简单方法是什么? 哈希用于版本控制,而非安全性。 问题答案: 看看crypto.createHash(algorithm)

  • 每次在typeorm中更改密码时,我都尝试哈希密码 我如何在每次像这样更改时将isModified功能从typeorm中的mongoose复制到hash password:

  • 问题内容: 我所说的“非空”是指至少包含一个非零字符的字符串。 供参考,这里是实现: 并且算法在文档中指定。 在整数溢出发生之前,答案很简单:不是。但是我想知道的是,由于整数溢出,非空字符串的哈希码是否可能为零?你能建造一个吗? 理想情况下,我正在寻找的是数学演示(或指向其中的链接)或构造算法。 问题答案: 当然。例如,字符串 f5a5a608 的哈希码为零。 我通过简单的蛮力搜索发现: 编辑:

  • 问题内容: 您如何将任意字符串转换为唯一的整数,这在Python会话和平台之间是相同的?例如,由于每个Python会话和平台均返回不同的值,因此无法使用。 问题答案: 如果哈希函数确实不适合您,则可以将字符串转换为数字。 通过将每个三元组映射到,这是可逆的。