问题标签 [salt]
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.
encryption - 加密:如何将 8 个字符的字符串转换为 128 位密钥、256 位密钥等?
我试图对此进行研究,但仍有一些问题没有得到解答。我正在研究如何将 8 个字符的密码变成高位加密密钥。在我的研究过程中,我发现了一些关于盐值的文章。
假设您可以使用所有 256 个字符,那么 8 个字符的密码将是 64 位长。所以,剩下的 64 位只是一个盐值。而且,如果我错了,请纠正我,但是这样做是为了如果有人要尝试尝试所有可能的值(蛮力),他们将不得不尝试所有 128 位,因为即使是盐也是未知的。
我的问题确实与这个“盐”值有关:
- 当有人提出申请时,盐值是否被硬编码到其中?如果是这样,它不能通过对可执行文件进行逆向工程来获得吗?
- 如果盐是随机生成的,那么我认为它必须有某种方法来复制它。那么,返回随机盐的那个函数不是能够被逆向工程以强制它复制自身以获得盐值吗?
- 这可能超出了范围,但是如果在服务器端(客户端/服务器关系)生成盐值,那么它是否必须与客户端共享,以便他们可以解密服务器发送的数据?而且,如果它被发送到客户端,它不能被拦截,这使它无用吗?
- 除了这个“盐”值之外,是否还有其他方法可以将 8 个字符的字符串转换为强加密密钥?
c# - 健全性检查:盐和散列密码
我对散列密码和盐值有一个想法。由于我对散列和加密比较陌生,所以我想我会把这个发布给你。为每个用户帐户生成唯一的盐,然后将盐和散列值存储在数据库中会更安全吗?或者,每次我对密码进行哈希处理时,安全地存储一个盐值并重新使用它?
例如,用户将使用密码:
我的代码将生成一个盐值:
然后哈希结果得到:
创建帐户时,哈希结果和盐将存储在用户配置文件中的数据库中。然后,每次用户登录时,都会生成一个新的 salt,密码和 salt 会重新散列并存储在数据库中。
有什么想法吗?就像我说的,这是对我的想法的健全性检查。
passwords - 加盐密码的最佳方法是什么?
你能告诉我加盐密码的最佳方法是什么。哪种方法最好?
谢谢你。
c# - 在数据库中存储散列密码和盐值的最佳方法 - varchar 或二进制?
一旦我生成了盐并对密码进行哈希处理(使用 bcrypt 等),最好将结果作为字符串或字节数组存储在数据库中?这两种方式有什么好处吗?还是更主观的决定?
asp.net-mvc-2 - 加盐密码 - 有比使用时间戳更好的选择吗?
我目前正在构建几个 ASP.NET MVC 2 站点,我想知道我有哪些选择来加盐密码。在我的 PHP 工作中,我通常只获取用户注册时的时间戳,然后将其附加到密码字符串的末尾,然后再使用 SHA1 对整个事物进行哈希处理。我的直觉是,这种方法可能还不够。
无论如何,我对使用 ASP.NET 进行用户管理还是很陌生,所以我认为从一开始就开始使用最佳实践符合我的最大利益。我知道 ASP.NET Web 表单具有可用的内置用户管理,但不确定 MVC。
php - 密码盐渍 - 永远不会匹配!
我很难弄清楚为什么用户密码散列不起作用。
我这样做的方式是正常的方法,在注册时我创建一个随机盐并结合密码和存储,但是当我尝试匹配登录密码时,它们失败了:(
传递给方法的所有变量都是原始的,没有加盐或加密,只是经过验证:/
问候
salt - 盐渍密码101
有人可以帮我了解加盐的工作原理吗?
到目前为止,我了解以下内容:
- 验证密码
- 生成随机字符串
- 散列密码和随机字符串并将它们连接起来,然后将它们存储在密码字段中......
我们如何存储盐,或者在用户登录时知道它是什么?我们是否将其存储在自己的领域中?如果我们不这样做,应用程序如何确定盐是什么?如果我们确实存储它,它不会破坏整个目的吗?
security - 为什么盐使字典攻击“不可能”?
更新:请注意,我不是在问什么是盐,什么是彩虹表,什么是字典攻击,或者盐的目的是什么。我在问:如果你知道用户salt和hash,计算他们的密码不是很容易吗?
我了解这个过程,并在我的一些项目中自己实施。
在您存储的数据库中:
我见过的每个加盐的实现都会在密码的末尾或开头添加盐:
因此,来自值得他的盐(哈哈)的黑客的字典攻击将简单地针对上面列出的常见组合中存储的盐运行每个关键字。
当然,上面描述的实现只是为黑客增加了另一个步骤,而没有真正解决根本问题?有什么替代方法可以绕过这个问题,还是我误解了这个问题?
我唯一能想到的就是有一个秘密混合算法,将盐和密码以随机模式结合在一起,或者将其他用户字段添加到散列过程中,这意味着黑客必须能够访问数据库和代码才能结合他们进行字典攻击以证明卓有成效。(更新,正如评论中指出的那样,最好假设黑客可以访问您的所有信息,所以这可能不是最好的)。
让我举一个例子,说明我建议黑客如何使用密码和哈希列表来破解用户数据库:
来自我们被黑数据库的数据:
常用密码字典:
对于每个用户记录,循环常用密码并对它们进行哈希处理:
我希望这能更好地说明我的观点。
给定 10,000 个常用密码和 10,000 条用户记录,我们需要计算 100,000,000 个哈希来发现尽可能多的用户密码。这可能需要几个小时,但这不是一个真正的问题。
开裂理论更新
我们将假设我们是一个损坏的虚拟主机,它可以访问 SHA1 哈希和盐的数据库,以及混合它们的算法。该数据库有 10,000 条用户记录。
该站点声称能够使用 GPU 每秒计算 2,300,000,000 次 SHA1 哈希。(在现实世界的情况下可能会更慢,但现在我们将使用引用的数字)。
(((95^4)/2300000000)/2)*10000 = 177 秒
给定 95 个可打印 ASCII 字符的完整范围,最大长度为 4 个字符,除以计算速率(变量)除以 2(假设发现密码的平均时间平均需要 50% 的排列)为 10,000用户需要 177 秒才能计算出长度为 <= 4 的所有用户密码。
让我们稍微调整一下以适应现实。
(((36^7)/1000000000)/2)*10000 = 2 天
假设不区分大小写,密码长度 <= 7,只有字母数字字符,解决 10,000 条用户记录需要 4 天,并且我将算法的速度减半以反映开销和非理想情况。
重要的是要认识到这是一种线性蛮力攻击,所有计算都是相互独立的,因此它是多个系统解决的完美任务。(IE 很容易设置 2 台计算机从不同端运行攻击,执行时间减半)。
考虑到对密码进行 1000 次递归散列以使该任务的计算成本更高的情况:
(((36^7) / 1 000 000 000) / 2) * 1000 秒 = 10.8839117 小时
这表示最大长度为 7 个字母数字字符,执行速度低于一位用户引用的数字的一半。
递归散列 1,000 次有效地阻止了全面攻击,但对用户数据的针对性攻击仍然容易受到攻击。
uuid - 使用 CreateUUID() 函数作为盐是个好主意吗?
我正在使用coldfusion,我想为我的密码生成一个随机盐场。我想知道 CreateUUID() 函数在这里是否有用。我发现了许多使用单独函数创建盐字符串的示例;但是当您可以使用 rand() 或 CreateUUID() 函数时,为什么要这样做呢?我不确定。
这是矫枉过正还是个好主意?或者我应该使用 rand() 还是时间戳?
hash - 有人可以解释一下盐在存储散列密码时有何帮助吗?
当密码或其他重要信息的数据库遭到破坏时,我很难理解附加到哈希的盐如何帮助提高安全性。
例如,如果盐是“hello”,并附加到密码“password”,那么盐和密码存储在一起,“hellopassword”并散列产生:
然后加盐:
这如何更安全?攻击者知道盐,所以现在可以轻松计算密码......对吗?还是我从根本上误解了什么?