这个问题已有 8 年以上历史,时代已经变了: https://arstechnica.com/information-technology/2017/02/at-deaths-door-for-years-widely-used-sha1-function-is-now-dead/
对于密码:https://en.wikipedia.org/wiki/PBKDF2
对于数据:SHA3
SHA512 比 SHA1 更复杂,但与使用 512 进行哈希处理相比,使用 SHA1 对加盐密码进行哈希处理会损失多少安全性?就拥有数据库的人破解单个密码所需的时间而言。我使用的框架无法让我轻松访问 SHA512,我必须重写一些东西才能使其正常工作,所以我想只使用 SHA1,尽管过去我一直使用 SHA512。
最佳答案
当前已知的 SHA-1 弱点不会影响您尝试执行的操作的安全性。无法从其散列版本恢复密码依赖于“原像抵抗”,据我们所知,这对于 SHA-1 仍然完全不可行。它对于 SHA-512、SHA-256 甚至 MD4 或 MD5 也是完全不可行的。一个以科幻为导向的头脑可能会设想计算机在 2050 年左右实现为 MD4 或 MD5 寻找原像的能力; SHA-1 需要更长的时间。
现在碰巧的是,虽然在 SHA-1 上计算原像没有已知的捷径,但也几乎没有安全证明。用数学术语来说,如果 SHA-1 中使用的压缩函数与“随机预言机”没有区别,那么它就不会受到原像的影响。但是 SHA-1 的已知弱点(理论上)会导致冲突,这也表明它的压缩功能不是随机预言。因此,SHA-1 对原像的安全性不再是“有很好的数学理由为什么它不会被破坏”的说服力。它更像是“嗯,还没有找到如何破解它”的那种。
更通俗地说,如果您使用 SHA-1,那么您可能需要为自己辩护。即使你没有做错任何事情,你对 SHA-1 的选择也会受到质疑。然而没有人会质疑使用 SHA-256 或 SHA-512,即使这意味着一些开发开销。简而言之,使用 SHA-1 是一种糟糕的公共(public)关系。
请注意,加盐与该问题完全正交。加盐旨在防止对不同密码实例的攻击之间成本分摊。预计算表(包括所谓的“彩虹表”)是一种共享(建表成本高,但可用于攻击 2、10、10000 个密码,每个攻击密码的额外成本很小)。加盐会破坏共享。腌制很好。击败共享很重要,因为攻击一个密码是可能的:不是因为哈希函数,而是因为密码是适合人脑的东西,因此容易受到蛮力攻击(“字典攻击”)。对于与密码相关的任何事情,您不会因为哈希函数的弱点而遇到问题,而是因为您首先使用了密码。
关于php - 与盐渍 SHA512 相比,盐渍 SHA1 有多不安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740443/
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
在Ruby1.9.3中,you'reallowedtorunmultipletestcasesatonce.我不确定这是语言的特性、minitest库还是YARV的特性,所以对于任何不好的术语表示歉意。但是他们是否为此取消了GVL,或者这是否仅仅意味着如果一个线程正在执行IO,另一个线程可以利用CPU? 最佳答案 该实现不使用线程,而是使用通过管道进行通信的独立进程。参见例如thispresentation.所以GVL/GIL没有发挥作用。 关于ruby-Ruby1.9.3中的并行测试有
我在我的Sinatra应用程序中使用Hash#to_xml。在我转向actviesupport3.0.0之前,它一直有效activesupport在3.0.0的使用有区别吗?例如这很好用gem'activesupport','2.3.5'require'active_support'{}.to_xml和gem'activesupport','3.0.0'require'active_support'{}.to_xml生成:NoMethodError:{}的未定义方法“to_xml”:哈希 最佳答案 当您需要时,ActiveSuppo
ActiveRecord似乎定义实例方法的方式与attr_accessor不同。attr_accessor似乎没有为我新定义的属性定义super方法:classSomeClassattr_accessor:some_attributedefsome_attributesuperendend>>some_class=SomeClass.new>>some_class.some_attributeNoMethodError:super:nosuperclassmethod`some_attribute'for..鉴于ActiveRecord明确定义了一个super方法:classSomeC
在我的Rails应用程序中,我收到来自brakeman的以下安全警告。使用模型属性调用的不安全反射方法常量化。这是我的代码正在执行的操作。chart_type=Chart.where(id:chart_id,).pluck(:type).firstbeginChartPresenter.new(chart_type.camelize.constantize.find(chart_id))rescueraise"Unabletofindthechartpresenter"end根据我的研究,我还没有找到任何具体的解决方案。我听说你可以创建一个白名单,但我不确定brakeman在寻找什么。
我正在就Ruby语言和环境向.NET(C#)开发团队进行一系列演讲。我把它当作一个机会来强调Ruby相对于C#的优势。首先,我想在进入环境之前专注于语言本身(RoR与ASPMVC等)。你会介绍Ruby语言的哪些特性? 最佳答案 我刚才在一个.NET用户组做了一个关于IronRuby的演讲,遇到了类似的问题。我关注的事情是:鸭子打字。没有什么比ListstringList=newList()更愚蠢的了;表达力强,语法简洁。简单的事情,比如省略括号、数组和散列文字等(结合鸭子类型,你会得到string_list=[]这显然更好)。所有的
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?