- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。
8年前关闭。
我正在研究散列算法,但找不到答案。
最佳答案
可以说 bcrypt 或 SHA-512(在适当的算法(如 PBKDF2)的上下文中)是否足够好就足够了。答案是肯定的,任何一种算法都足够安全,以至于漏洞将通过实现缺陷而不是密码分析发生。
如果你坚持要知道哪个“更好”,SHA-512 已经得到了 NIST 和其他人的深入审查。这很好,但已经认识到缺陷,虽然现在无法利用,但导致了新哈希算法的 SHA-3 竞争。另外,请记住,哈希算法的研究比密码的研究“更新”,密码学家仍在学习它们。
尽管 bcrypt 整体上没有像 Blowfish 本身那样受到严格审查,但我相信基于具有易于理解的结构的密码为其提供了一些基于哈希的身份验证所缺乏的固有安全性。此外,使用普通 GPU 作为攻击基于 SHA-2 的哈希的工具更容易;由于其内存要求,优化 bcrypt 需要更专业的硬件,如带有一些板载 RAM 的 FPGA。
注意:bcrypt 是一种内部使用 Blowfish 的算法。它本身不是一种加密算法。它用于不可逆转地模糊密码,就像散列函数用于执行“单向散列”一样。
加密散列算法被设计为无法逆转。换句话说,仅给定散列函数的输出,应该“永远”找到将产生相同散列输出的消息。事实上,找到任何两条产生相同哈希值的消息在计算上应该是不可行的。与密码不同,散列函数不使用 key 参数化;相同的输入将始终产生相同的输出。
如果有人提供了一个密码,该密码对存储在密码表中的值进行了哈希处理,则他们将通过身份验证。特别是,由于散列函数的不可逆性,假设用户不是掌握散列并将其反转以找到有效密码的攻击者。
现在考虑 bcrypt。它使用 Blowfish 加密魔法字符串,使用从密码“派生”的 key 。稍后,当用户输入密码时,再次推导出 key ,如果使用该 key 加密产生的密文与存储的密文匹配,则用户通过身份验证。密文存储在“密码”表中,但从不存储派生 key 。
为了破解这里的密码,攻击者必须从密文中恢复 key 。这称为“已知明文”攻击,因为该攻击知道已加密的魔法字符串,但不知道使用的 key 。 Blowfish 已被广泛研究,目前还没有已知的攻击可以让攻击者找到具有单个已知明文的 key 。
因此,就像基于加密摘要的不可逆算法一样,bcrypt 根据密码、盐和成本因素产生不可逆的输出。它的优势在于 Blowfish 对已知明文攻击的抵抗力,这类似于对摘要算法的“第一次原像攻击”。由于它可以用来代替散列算法来保护密码,因此 bcrypt 被混淆地称为“散列”算法本身。
假设彩虹表因正确使用盐而受阻,任何真正不可逆的功能都会使攻击者进行反复试验。攻击者进行试验的速度取决于不可逆“散列”算法的速度。如果使用散列函数的单次迭代,攻击者可以使用成本约为 1000 美元的设备每秒进行数百万次试验,在几个月内测试所有长达 8 个字符的密码。
然而,如果摘要输出被“反馈”数千次,则在该硬件上测试同一组密码将需要数百年的时间。 Bcrypt 通过在其 key 派生例程中进行迭代来实现相同的“ key 强化”效果,而像 PBKDF2 这样的基于哈希的适当方法也可以做同样的事情;在这方面,这两种方法是相似的。
因此,我对 bcrypt 的建议源于以下假设:1) Blowfish 与 SHA-2 散列函数系列的审查级别相似,2) 密码的密码分析方法比散列函数的密码分析方法开发得更好。
关于security - SHA512 与 Blowfish 和 Bcrypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561174/
安全服务 API 似乎不允许我直接计算哈希。有很多公共(public)领域和自由许可的版本可用,但如果可能的话,我宁愿使用系统库实现。 可以通过 NSData 或普通指针访问数据。 哈希的加密强度对我
我有一堆大对象,以及它们的结构和它们的向量。有时检查复合对象的完整性很重要;为此,我正在使用对象的 Sha256“签名”。 至少有两种方法可以定义复合对象的签名:通过计算组件串联的sha,或者通过计算
研究了一个 cpu 矿工的源代码,我发现了这段代码: work->data[20] = 0x80000000; 好吧,我问了编码,他的回答是: “这些值是标准 SHA-2 填充的一部分” 谷歌搜索“s
您是否需要许可证才能将 SHA-1 或 SHA-2 用于商业目的? 最佳答案 它最初由 NSA 为安全 DSA 加密创建,然后被 NIST 采用以维护算法的所有方面以及 SHA(2 和 3)。 这是一
谁能解释一下 SHA-256 和 RIPEMD-160,哪种算法通常更快,性能和空间比较是什么(如果有)?我所说的空间比较并不是指 160 位和 256 位,而是指冲突频率、生产环境中空间要求的差异。
我对 SHA-2 和 SHA-256 之间的区别有点困惑,并且经常听到它们互换使用。我认为 SHA-2 是哈希算法的“家族”,而 SHA-256 是该家族中的特定算法。任何人都可以消除困惑。 最佳答案
我正在尝试从 SHA-1 更改为 SHA-512 以获得更好的安全性,但我不完全清楚如何进行更改。 这是我使用 SHA-1 的方法: public static String sha1Convert(
在我的 C# 应用程序中,我使用 RSA 对文件进行签名,然后再由上传者上传到我公司的数据库中,在这里我必须选择 SHA-1 或 SHA-2 来计算哈希值。与编程中的任何其他组件一样,我知道必须有一个
我正在研究 SHA1 、 SHA-256 、 SHA-512 在不同处理器上的速度(计算哈希的时间) 这些散列算法可以分解为跨多个核心/线程运行吗? 最佳答案 如果您想将计算单个哈希的执行并行化(无论
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
这个问题在这里已经有了答案: SHA2 password hashing in java (4 个答案) 关闭 9 年前。 我需要计算文件的 SHA-2 或 SHA-3。我没有提交任何代码示例来说明
在我的应用中,之前开发者已经使用openssl version 1.0.1e [#include openssl/sha.h]并且已经使用了函数 unsigned char *SHA(const un
我正在尝试实现 SHA-2加密而不是 SHA-1 . 为此,我知道这两种哈希算法之间的位数不同,这让我很困惑。 如何实现这一目标以及我需要在哪些部分进行必要的更改? 我可以使用来自 Java、Pyth
我目前正在使用 SHA-1。我像下面的代码一样使用它,但我想将它更改为 SHA-256。 public String sha1Encrypt(String str) { if(str == nul
我想将一些 Java 代码转换为 C#。 Java 代码: private static final byte[] SALT = "NJui8*&N823bVvy03^4N".getBytes()
我的程序使用 SHA-1 证书进行 SSL 连接。 SHA-2 证书现在已被一些网络服务(Gmail)广泛使用。这会导致在电子邮件通知设置期间阻止与 SMTP 服务器的传入连接。 为了发送电子邮件,我
我在提交中生成差异/更改,以便我可以将其上传到 ReviewBoard。 我使用了“git show d9f7121e8ebd4d1f789dab9f8214ada2h480b9cf”。它给了我 di
我刚刚从这个 HN-post 了解到 git 正在转向新的散列算法(从 SHA-1 到 SHA-256 ) 我想知道是什么让 SHA-256 最适合 git 的用例。 是否有任何/许多强有力的技术原因
是的,我需要降级到 SHA-1 以增加对项目中旧浏览器的兼容性。 有没有办法做到这一点? 我正在使用 Linux Centos 6.5 和 Apache/2.2.15。 我有 3 个文件: SSLCe
在 TLS1.1 和 TLS1.2 中,Cipher(rsa-with-aes-128-cbc-sha) 将使用哪个 Digest(SHA1 或 SHA256)? 最佳答案 根据官方openssl w
我是一名优秀的程序员,十分优秀!