- 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/
我似乎找不到差异的来源。我在这个在线解密工具中发现了这种差异 http://www.tools4noobs.com/online_tools/decrypt/ 我有一些加密的 Blowfish 数据,
C++ blowfish 支持加密少于 C# NET BlowfishC++ Blowfish<-- 在 C++ 和 C# 应用程序中,我加密了以下数组 byte response[6] =
我必须实现java密码空间填充。我正在尝试编写支持 Blowfish/CBC/space 模式的 Perl 代码的实现。我在Java Cipher列表中找不到相关模式,仅支持PCK5Padding和N
我正在使用 Blowfish 实现一个简单的密码存储。一切都很好,直到我尝试了几种不同的密码/ key 组合,并遇到了许多解密值仍然是垃圾的情况。 下面是一个演示该问题的独立类。我得到以下输出: 'A
我正在做一个关于图像加密的项目。我们在图像上使用河豚加密。根据 Paul Kocher 的代码 http://www.schneier.com/blowfish-download.html 。主要功能
在将此标记为重复之前,请理解我在 stackoverflow 上找不到任何关于河豚的有用信息。我正在尝试使用 Android Studio 使用河豚加密和解密字符串。我的加密似乎有效。但是当我尝试解密
我正在尝试通过Blowfish解密十六进制编码的字符串。但结果与正确的不同。 String s="a1d0534e4baf9e670bde8670caee8b87" String decKey = "
我今天一整天都在尝试找出如何读取二进制文件并对其进行解密。 在我的文件中,前 4 个字节描述文件格式,后 32 个字节是 header ,使用 Blowfish 加密。 所以我写了这段代码来做到这一点
我用 Blowfish 编码做了一些测试,发现了一些东西。编码后的字符串并不总是与源字符串一样长。有时会更短。 如果我想解码编码字符串,我需要在 openssl 函数中解码的长度: BF_cfb64_
我正在将 C++ TCP 客户端翻译成 C#。该客户端用于使用河豚对数组的 4 个字节进行编码。 C++ Blowfish C# Blowfish(C# NET) C++ BYTE respo
我正在尝试让一个 bowfish 函数用于简单的字符缓冲区。当我尝试解密加密缓冲区并在 EVP_CipherFinal_ex() 调用上失败时,程序失败。 #include #include #i
我正在用 Blowfish 算法加密我的文件,但我似乎对此一无所知。每当我尝试 Encipher() 时,它都会抛出一个异常,提示“无效长度”。我认为当它用 8 进行模数时,长度必须为零,我认为这
许多脚本语言(Python/PHP/等...)包含允许您使用 Blowfish 作为密码单向散列的功能(有时通过扩展)。我正在尝试为 C++ 找到类似的实现,但我遇到的一切都是加密/解密解决方案。 有
我一直在研究在 php 应用程序中保护密码的更好程序。形式上我会使用类似的东西(只是一个例子,不要开枪!): $salt = md5(rand() . md5(rand() . '$%E$%SDRT'
无法解密使用 Blowfish 在 Go 语言中加密的 Java 密文。 加密 import ( "testing" "golang.org/x/crypto/blowfish"
考虑以下执行 Blowfish 加密的方法: import javax.crypto.Cipher; import javax.crypto.Mac; import javax.crypto.spec
我们有一个类,它包装 BouncyCaSTLe(实际上是 Android 的 SpongyCaSTLe)Blowfish,以加密要传输的数据: public class BlowfishOutputS
Blowfish 能够进行强加密,并且可以使用最大 56 字节的 key (448 位 key )。 key 必须是 8 字节的倍数(最多 56)。 我想编写一个示例,它将自动填充和取消填充键的大小。
这是加密和解密消息的基本代码: #include #include #include //gcc cryptage.c -o cryptage -lcrypto int main(){ BF_K
我很难弄清楚如何使用 C# bouncycaSTLe 库来解密河豚 CTR 密文。由于缺少关于如何使用它的 BC 文档,我不知道如何使用它 我广泛搜索但没有在堆栈溢出中找到类似的东西,如果您有一些关于
我是一名优秀的程序员,十分优秀!