Tag: 哈希

HashSet与列表性能

很显然,genericsHashSet<T>类的search性能高于genericsList<T>类的search性能。 只需比较基于散列的密钥和List<T>类中的线性方法。 然而,计算散列键本身可能需要一些CPU周期,因此对于less量项目,线性search可以是HashSet<T>的真正替代。 我的问题:盈亏平衡点在哪里? 为了简化scheme(公平地),我们假设List<T>类使用元素的Equals()方法来标识一个项目。

腌制您的密码:最佳实践?

我一直很好奇…哪个更好的时候,哈希密码:前缀,或后缀? 为什么? 或者是否重要,只要你盐? 解释一下:我们(希望)现在知道我们应该在密码存储到数据库之前先encryption一个密码[ 编辑:所以你可以避免像最近发生的事情那样的事情 ]。 通常这是通过在将密码与哈希algorithm传递之前串接盐和密码来完成的。 但是这些例子各不相同…有些例子在密码之前加了盐。 一些例子在密码后添加盐。 我甚至见过一些尝试把盐放在中间。 那么更好的方法是什么?为什么? 有没有一种方法可以减less哈希碰撞的机会? 我的谷歌search没有就这个问题做出体面的分析。 编辑:伟大的答案乡亲们! 对不起,我只能select一个答案。 🙂

密码盐如何帮助防止彩虹桌袭击?

我在理解盐对密码的用途方面遇到了一些麻烦。 我的理解是,主要用途是阻止彩虹桌的攻击。 然而,我所看到的实现这些方法似乎并不能真正使问题变得更困难。 我看过很多教程,build议使用盐作为以下内容: $hash = md5($salt.$password) 原因是哈希现在不是映射到原始密码,而是密码和盐的组合。 但是要说$salt=foo和$password=bar和$hash=3858f62230ac3c915f300c664312c63f 。 现在有人用彩虹表可以颠倒散列,并提出input“foobar”。 然后他们可以尝试密码的所有组合(f,fo,foo,… oobar,obar,bar,ar,ar)。 获取密码可能需要几毫秒,但其他的不多。 我见过的其他用途是在我的linux系统上。 在/ etc / shadow中,散列密码实际上是与 salt一起存储的。 例如,“foo”的盐和“bar”的密码将哈希到: $1$foo$te5SBM.7C25fFDu6bIRbX1 。 如果黑客以某种方式能够得到这个文件,我不知道盐的用途是什么,因为te5SBM.7C25fFDu6bIRbX的反向散列已知包含“foo”。 感谢任何人都可以摆脱这一点。 编辑 :感谢您的帮助。 总结一下,我的理解是,盐使得哈希密码更加复杂,从而使其不太可能存在于预先计算好的彩虹表中。 之前我误解的是,我假设所有哈希表都存在彩虹表。

bcrypt如何能够内build盐?

Coda Hale的文章“如何安全地存储密码”声称: bcrypt有防止彩虹表攻击的内置盐。 他引用这篇文章说,在OpenBSD的bcrypt实现中: OpenBSD从arcfour(arc4random(3))密钥stream中生成128位bcrypt salt,内核从设备时序收集随机数据。 我不明白这是如何工作的。 在我的一个盐的概念: 每个存储的密码需要不同,所以每个都需要生成一个单独的彩虹表 它需要存储在某个地方,以便它是可重复的:当用户尝试login时,我们会尝试密码,重复我们原来存储密码时所做的相同的salt-and-hash程序,然后比较 当我使用bcrypt使用Devise(Railsloginpipe理器)时,数据库中没有salt列,所以我很困惑。 如果盐是随机的,没有存储在任何地方,我们如何可靠地重复哈希过程呢? 简而言之, bcrypt如何能够embedded盐 ?

C#中的哈希和盐密码

我刚刚通过DavidHayden的哈希用户密码文章之一。 真的,我无法得到他想要达到的目标。 这是他的代码: private static string CreateSalt(int size) { //Generate a cryptographic random number. RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); byte[] buff = new byte[size]; rng.GetBytes(buff); // Return a Base64 string representation of the random number. return Convert.ToBase64String(buff); } private static string CreatePasswordHash(string pwd, string salt) { string saltAndPwd = String.Concat(pwd, salt); string hashedPwd = FormsAuthentication.HashPasswordForStoringInConfigFile( […]

是“双散列”密码不仅仅是哈希一次?

在存储之前两次哈希密码是否比一次哈希一次更安全? 我在说的是这样做的: $hashed_password = hash(hash($plaintext_password)); 而不仅仅是这个: $hashed_password = hash($plaintext_password); 如果不太安全,你能提供一个很好的解释(或链接到一个)? 此外,使用的散列函数是否有所作为? 如果你混合使用md5和sha1(而不是重复相同的散列函数),它会有什么不同吗? 注1:当我说“双重散列”时,我正在谈论两次散列密码,以使其更加模糊。 我不是在谈论解决冲突的技巧 。 注2:我知道我需要添加一个随机盐,以确保安全。 问题是用相同的algorithm两次哈希是否有助于或伤害哈希。

使用自定义类types作为键的C ++ unordered_map

我正在尝试使用自定义类作为unordered_map的关键字,如下所示, #include <iostream> #include <algorithm> #include <unordered_map> //#include <map> using namespace std; class node; class Solution; class Node { public: int a; int b; int c; Node(){} Node(vector<int> v) { sort(v.begin(), v.end()); a = v[0]; b = v[1]; c = v[2]; } bool operator==(Node i) { if ( ia==this->a && ib==this->b &&i.c==this->c ) { return […]

散列密码和encryption之间的区别

这个问题的最高票数表明: 另一个并不是安全问题,尽pipe它是与安全有关的,但完全并且可能会失败,以避免散列密码和encryption密码之间的区别 。 最常见的代码是程序员试图提供不安全的“提醒我的密码”function。 这个区别究竟是什么? 我总是觉得哈希是一种encryption的forms。 海报所指的不安全function是什么?

hashCode方法的最佳实现

我们如何决定集合的hashCode()方法的最佳实现(假设equals方法已被正确覆盖)?

奇怪的,意想不到的行为(消失/改变值),当使用哈希默认值,例如Hash.new()

考虑这个代码: h = Hash.new(0) # New hash pairs will by default have 0 as values h[1] += 1 #=> {1=>1} h[2] += 2 #=> {2=>2} 这很好,但是: h = Hash.new([]) # Empty array as default value h[1] <<= 1 #=> {1=>[1]} ← Ok h[2] <<= 2 #=> {1=>[1,2], 2=>[1,2]} ← Why did `1` change? h[3] << […]