问题标签 [hash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
92220 浏览

random - 在 MD5 产生碰撞之前有多少随机元素?

我在 Amazon S3 上有一个图像库。对于每张图片,我会 md5 我服务器上的源 URL 加上时间戳以获得唯一的文件名。由于 S3 不能有子目录,我需要将所有这些图像存储在一个平面文件夹中。

我需要担心产生的 MD5 哈希值的冲突吗?

奖励:在我开始看到 MD5 产生的哈希值冲突之前,我可以拥有多少个文件?

0 投票
9 回答
2471 浏览

image - 通过在图像内容上运行 MD5 为随机图像生成唯一文件名的任何警告?

我想为每个图像生成唯一的文件名,所以我使用 MD5 来制作文件名。由于两个相同的图像可能来自不同的位置,我想实际上基于图像内容的哈希。这有什么注意事项?

(用 PHP5 这样做是值得的)

0 投票
4 回答
170 浏览

asp.net - 散列数据以确保它在传输过程中没有损坏

(在 asp.net 环境下)

我将通过 Web 服务将数据发送到中央服务器,并且我想对数据进行哈希处理以确保它在传输过程中不会被损坏。

我应该使用哪种哈希方法?当 Web 服务传递对象时,我可以散列吗?

0 投票
4 回答
9485 浏览

c# - CNG、CryptoServiceProvider 和 HashAlgorithm 的托管实现

所以我想知道哈希算法的各种实现之间是否有任何重大差异,以SHA系列算法为例。它们每个都有 3 个实现,1 个在托管代码中,2 个围绕不同的本机加密 API 进行包装,但是使用它们之间有什么主要区别吗?我可以想象包装器版本可以具有更高的性能,因为它是在本机代码中执行的,但是 surley 嘿都需要执行完全相同的计算并因此提供相同的输出,即它们是可互换的。它是否正确?

例如 SHA512CNG 不能在 XP SP2 上使用(文档错误),但 SHA512MANAGED 可以。


@Maxim - 谢谢,但不是我所要求的。我在问使用给定哈希算法的 Managed/CryptoServiceProvider/CNG 实现是否有任何区别,除了可能的性能。使用 .NET 3.5,您可以获得具有三种实现的所有哈希算法,所以

SHA512Managed SHA512CryptoServiceProvider SHA512Cng

后两者是原生 API 的包装器。例如,所有 SHAxxx 实现都是如此。

0 投票
6 回答
12464 浏览

c# - C# Windows 应用程序中的密码散列,缺少 ASP.NET 的 FormsAuthentication?

我的 Win 表单应用程序似乎不喜欢 FormsAuthentication,我对散列完全陌生,因此非常欢迎任何帮助转换它。谢谢。

0 投票
10 回答
28373 浏览

security - 为哈希隐藏盐的必要性

在工作中,我们有两种相互竞争的盐理论。我工作的产品使用用户名或电话号码之类的东西来加盐。本质上,对于每个用户来说都是不同的,但我们很容易获得。另一款产品为每个用户随机生成一个salt,并在用户每次更改密码时更改。然后在数据库中加密盐。

我的问题是第二种方法是否真的有必要?我可以从纯理论的角度理解它比第一种方法更安全,但从实用性的角度来看呢。现在要对用户进行身份验证,salt 必须未加密并应用于登录信息。

在考虑之后,我只是没有看到这种方法真正的安全收益。将盐从一个帐户更改为另一个帐户,即使攻击者知道如何快速确定每个帐户的值,仍然使某人尝试暴力破解散列算法非常困难。这是在假设密码足够强的情况下进行的。(显然,找到一组密码的正确哈希值,其中它们都是两位数字,比找到正确的 8 位密码哈希值要容易得多)。我的逻辑是不正确的,还是我遗漏了什么?

编辑:好的,这就是为什么我认为加密盐真的没有实际意义的原因。(让我知道我是否走在正确的轨道上)。

对于下面的解释,我们假设密码总是 8 个字符,salt 是 5,所有密码都由小写字母组成(这只是为了让数学更容易)。

每个条目使用不同的盐意味着我不能使用相同的彩虹表(实际上,如果我有一个足够大的大小,我可以使用,但我们暂时忽略它)。据我了解,这是真正的关键,因为要破解每个帐户,我必须重新发明轮子,可以说每个帐户。现在,如果我知道如何将正确的盐应用于密码以生成散列,我会这样做,因为盐实际上只是扩展了散列短语的长度/复杂性。所以我会减少我需要生成的可能组合的数量,以“知道”我的密码+盐从 13^26 到 8^26,因为我知道盐是什么。现在这使它变得更容易,但仍然非常困难。

因此,对盐进行加密。如果我知道盐是加密的,我不会先尝试解密(假设我知道它有足够的加密级别)。我会忽略它。而不是试图弄清楚如何解密它,回到前面的例子,我只生成一个更大的彩虹表,其中包含 13^26 的所有密钥。不知道盐肯定会减慢我的速度,但我认为它不会增加尝试首先破解盐加密的艰巨任务。这就是为什么我认为这不值得。想法?

这是一个链接,描述了密码在蛮力攻击下可以保存多长时间: http ://www.lockdown.co.uk/?pg=combi

0 投票
3 回答
3967 浏览

security - 使用户身份验证脱机的最佳模型是什么?

我正在将身份验证构建到客户端-服务器应用程序中,我收到的一些反馈是我应该将哈希计算留给服务器(最初实现它是为了让客户端接收哈希,从客户端的输入密码,然后比较它们)。这似乎是有道理的,但我有一个问题 -我如何验证离线用户

例如,如果我部署到无法访问 Internet 的移动设备,那么处理身份验证的最安全方法是什么?

我看到它的方式,我将不得不允许客户端接收哈希+任何盐信息,或者使用单独的密码/密码并允许客户端接收该密码的哈希+

我倾向于后者,因为它似乎限制了攻击媒介——如果移动设备受到威胁,那么整个系统的安全性(例如,所有网络认证的部分)都会保持不变。

我最好的选择和考虑是什么?

0 投票
3 回答
3445 浏览

perl - Perl:while ($key = each %hash) 不会在 key = 0 处停止

显然,我不需要这个;我只是好奇这里发生了什么。我错过了一些简单的东西吗?我可以在所有版本的 Perl 中依赖这种行为吗?)

Perl v5.8.8:

输出

man perlfunc(each) 没有解释为什么当$k分配为 0 时 while 循环继续。代码表现得好像while循环上的条件是($k = each %h, defined $k)

如果循环条件实际更改为, ($k = each %h, $k)那么它确实会$k = 0按预期停止。

它还停留在$k = 0以下重新实现each

只输出:

0 投票
1 回答
763 浏览

.net - 为什么 System.Security.Cryptography 中有多个不同的哈希算法提供程序?

正如MSDN所记录的,对于许多不同的散列算法(例如 MD5、SHA、RIPE),有几个提供者。对于每种算法,任何可用的实现似乎都属于 3 类之一:

  • [算法] Cng
  • [算法] CryptoServiceProvider
  • [算法]托管

为什么这些散列算法有多种实现?

实现之间有什么区别?

选择在应用程序中使用哪种实现时有哪些实际区别?

参考:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx

0 投票
4 回答
9622 浏览

javascript - 那里有什么好的 JavaScript 哈希(代码/表)实现吗?

是的,我知道您可以在 JavaScript 中使用常规对象作为关联数组,但我想使用更接近 java 的 Map 实现的东西(HashMap、LinkedHashMap 等)。可以将任何类型的数据用作密钥的东西。JavaScript 实现中有没有好的哈希(代码/表)?