Hash 为什么要使用河豚作为密码?

Hash 为什么要使用河豚作为密码?,hash,passwords,blowfish,Hash,Passwords,Blowfish,我对密码的安全性有点困惑。 假设我有一个带有用户帐户表的数据库。 这是我保存密码的地方。 现在我用的是盐腌沙司 我读到基于河豚的函数比sha1更好,因为它们需要更多的时间来处理请求 是否有任何理由不使用salted sha1,而只是将登录尝试次数限制在某个合理的数字(例如每小时50次)作为“防火墙”来抵御暴力攻击 使用此数据库的人员不需要强制执行任何操作,因为 他可以通过查询来更改记录 有什么理由不使用saltedsha1而只限制登录吗 尝试计数到某个合理的数字,例如每小时50次 作为一个“防火

我对密码的安全性有点困惑。 假设我有一个带有用户帐户表的数据库。 这是我保存密码的地方。 现在我用的是盐腌沙司

我读到基于河豚的函数比sha1更好,因为它们需要更多的时间来处理请求

是否有任何理由不使用salted sha1,而只是将登录尝试次数限制在某个合理的数字(例如每小时50次)作为“防火墙”来抵御暴力攻击

使用此数据库的人员不需要强制执行任何操作,因为 他可以通过查询来更改记录

有什么理由不使用saltedsha1而只限制登录吗 尝试计数到某个合理的数字,例如每小时50次 作为一个“防火墙”来阻止暴力攻击

如果你不使用任何合适的算法加密密码,你就没有基本的安全防范措施

为什么“仅仅”阻止登录尝试不安全

除此之外,你还需要封锁所有可能的入口,例如:

ssh Web服务您的Web应用程序、phpmyadmin、openpanel等 ftp 更多 您还需要信任每一个有权访问数据库和服务器的用户,我不希望人们阅读我的密码,但我更不喜欢的是,您是否为我做出决定,从Metaforical的角度来说:-

也许其他人可以解释关于河豚vs SHA的讨论,尽管我怀疑这部分是一个有价值的问题

有什么理由不使用saltedsha1而只限制登录吗 尝试计数到某个合理的数字,例如每小时50次 作为一个“防火墙”来阻止暴力攻击

如果你不使用任何合适的算法加密密码,你就没有基本的安全防范措施

为什么“仅仅”阻止登录尝试不安全

除此之外,你还需要封锁所有可能的入口,例如:

ssh Web服务您的Web应用程序、phpmyadmin、openpanel等 ftp 更多 您还需要信任每一个有权访问数据库和服务器的用户,我不希望人们阅读我的密码,但我更不喜欢的是,您是否为我做出决定,从Metaforical的角度来说:-


也许其他人可以解释关于Blowfish vs SHA的讨论,尽管我怀疑这部分是Stackworth格式的问题

在Blowfish中存储密码比SHA-1更安全,因为到目前为止,还没有报道过获取Blowfish加密字符串值的方法。另一方面,SHA-1报告了从加密字符串获取数据的方法。您不能信任SHA-1阻止某人获取其数据

如果您愿意接受建议,我认为在存储密码时根本不需要使用双向加密。可以选择使用SALT SHA-256方法对用户密码进行散列。允许您的用户通过电子邮件重置自己的密码通常被认为是一个好策略,它会导致数据集不容易被破解

如果您出于任何原因需要双向加密,除了Blowfish之外,AES-256 Rijndael或Twofish目前也足够安全,可以处理敏感数据。不要忘记,您可以自由使用多种算法来存储加密数据

关于暴力强迫,它与加密数据库存储几乎没有关系。当您提到攻击方法时,您看到的是一个完整的安全模型。使用不推荐的算法并通过实施策略来防止易受攻击来弥补,这被认为不是一种成熟的安全方法

总之

使用单向散列存储密码,允许用户通过电子邮件重置 不要害怕使用多种方法存储加密数据 如果您必须使用加密/解密方案,请确保密钥安全,并仅使用经验证的算法 防止暴力攻击是一种良好的心态,但这只会减慢某人的速度或鼓励他们寻找其他切入点 不要把这当作福音:当涉及到安全性时,每个人都有不同的要求,你做的研究越多,你的方法就会变得越好。如果您没有用完整的安全策略完全封装您的敏感数据,您可能会得到一个令人讨厌的惊喜


来源:Wikipedia,

在Blowfish中存储密码比SHA-1更安全,因为到目前为止,还没有报道过获取Blowfish加密字符串值的方法。另一方面,SHA-1报告了从加密字符串获取数据的方法。您不能信任SHA-1阻止某人获取其数据

如果您愿意接受建议,我认为在存储密码时根本不需要使用双向加密。可以选择使用SALT SHA-256方法对用户密码进行散列。允许您的用户通过电子邮件重置他们自己的密码通常被认为是一个好策略,它会导致dat 不易破裂的一套

如果您出于任何原因需要双向加密,除了Blowfish之外,AES-256 Rijndael或Twofish目前也足够安全,可以处理敏感数据。不要忘记,您可以自由使用多种算法来存储加密数据

关于暴力强迫,它与加密数据库存储几乎没有关系。当您提到攻击方法时,您看到的是一个完整的安全模型。使用不推荐的算法并通过实施策略来防止易受攻击来弥补,这被认为不是一种成熟的安全方法

总之

使用单向散列存储密码,允许用户通过电子邮件重置 不要害怕使用多种方法存储加密数据 如果您必须使用加密/解密方案,请确保密钥安全,并仅使用经验证的算法 防止暴力攻击是一种良好的心态,但这只会减慢某人的速度或鼓励他们寻找其他切入点 不要把这当作福音:当涉及到安全性时,每个人都有不同的要求,你做的研究越多,你的方法就会变得越好。如果您没有用完整的安全策略完全封装您的敏感数据,您可能会得到一个令人讨厌的惊喜


来源:Wikipedia,

基于河豚的函数,你肯定是指BCrypt散列函数。正如您已经说过的那样,BCrypt的设计速度很慢,需要一些计算时间,这是相对于其他快速散列函数的唯一优势,但这是至关重要的

有了一个现成的GPU,你可以每秒计算大约散列值,这样你就可以在不到2毫秒的时间内用5'000'000个单词来暴力破解一本完整的英语词典。即使SHA-1是一个安全的散列函数,也不适合对密码进行散列

BCrypt有一个成本因素,可以适应未来的硬件,因此速度更快。成本因素决定执行哈希运算的迭代次数。最近我写了一篇,我想请你看一看


您关于限制登录尝试的观点是有道理的,但是哈希应该能够保护密码,以防攻击者能够访问数据库SQL注入。当然,您可以限制登录尝试,但这与哈希无关,您甚至可以在这种情况下以明文形式存储密码。

使用基于blowfish的函数,您肯定是指BCrypt哈希函数。正如您已经说过的那样,BCrypt的设计速度很慢,需要一些计算时间,这是相对于其他快速散列函数的唯一优势,但这是至关重要的

有了一个现成的GPU,你可以每秒计算大约散列值,这样你就可以在不到2毫秒的时间内用5'000'000个单词来暴力破解一本完整的英语词典。即使SHA-1是一个安全的散列函数,也不适合对密码进行散列

BCrypt有一个成本因素,可以适应未来的硬件,因此速度更快。成本因素决定执行哈希运算的迭代次数。最近我写了一篇,我想请你看一看


您关于限制登录尝试的观点是有道理的,但是哈希应该能够保护密码,以防攻击者能够访问数据库SQL注入。当然,您可以限制登录尝试,但这与哈希无关,您甚至可以在这种情况下以明文形式存储密码。

我想OP是指带有基于Blowfish函数的BCrypt,而不是加密函数本身。与SHA-1一样,SHA-256函数对于散列密码来说速度太快,并且允许轻易地使用暴力。我想OP的意思是使用基于Blowfish函数的BCrypt,而不是用于加密本身的函数。和SHA-1一样,SHA-256函数对于散列密码来说速度太快了,并且可以轻易地使用暴力;因为我不明白为什么服务器端哈希算法在速度较慢时更好。。。没有考虑过用其他方式访问数据库,比如sqli。我总是通过regexp运行所有表单输入,但你永远不知道;现在我还有一个问题。如果bcrypt是一个散列算法,我还没有深入阅读你的文章。。。bcrypt函数的输出是否总是长度?比如sha1或md5。我需要为php寻找bcrypt。php只有“crypt”和“hash”函数。。但我不确定它们是如何工作的。那么碰撞呢bcrypt@Tomek-BCrypt的输出总是一个长度为60个字符的字符串,包括salt和成本因素。查看提供的链接,您将发现教程以及有关PHP实现密码的信息,其中解释了PHPass,建议使用PHPass,您可以使用SQL注入。顺便说一句,您应该总是转义用户输入,在使用mysqli\u real\u escape\u字符串将它们添加到SQL之前,regex仅适用于验证用户输入。但是如果不允许使用“需要转义”的字符呢
结婚了吗?我读了你的文章。我现在的问题是为什么盐没有安全储存。例如如果有人闯入数据库,得到了hash和salt,他就可以通过使用字典并在每个单词后面加上salt/prependig来进行暴力破解dictionary@Tomek-在这种情况下,假设您已验证电子邮件地址,您不需要逃避用户输入,但如果您这样做,则不会造成任何伤害。通常,转义所有字符串值是好的,最好是转义一个不必要的情况,而不是忘记一个。你是对的。我查看了页面中PHP部分的代码,在数组的“dictionary”对象中发现了一个bug。您正在使用isset检查数组\u键\u是否存在。这是错误的,因为$a['null']=null;isset$a['null']将在数组\u key\u存在时返回FALSE'null',$a将返回TRUE,因为数组key确实存在,这正是我想要的答案;因为我不明白为什么服务器端哈希算法在速度较慢时更好。。。没有考虑过用其他方式访问数据库,比如sqli。我总是通过regexp运行所有表单输入,但你永远不知道;现在我还有一个问题。如果bcrypt是一个散列算法,我还没有深入阅读你的文章。。。bcrypt函数的输出是否总是长度?比如sha1或md5。我需要为php寻找bcrypt。php只有“crypt”和“hash”函数。。但我不确定它们是如何工作的。那么碰撞呢bcrypt@Tomek-BCrypt的输出总是一个长度为60个字符的字符串,包括salt和成本因素。查看提供的链接,您将发现教程以及有关PHP实现密码的信息,其中解释了PHPass,建议使用PHPass,您可以使用SQL注入。顺便说一句,您应该总是转义用户输入,在使用mysqli\u real\u escape\u字符串将它们添加到SQL之前,regex仅适用于验证用户输入。但是如果根本不允许使用“需要转义”的字符呢?我读了你的文章。我现在的问题是为什么盐没有安全储存。例如如果有人闯入数据库,得到了hash和salt,他就可以通过使用字典并在每个单词后面加上salt/prependig来进行暴力破解dictionary@Tomek-在这种情况下,假设您已验证电子邮件地址,您不需要逃避用户输入,但如果您这样做,则不会造成任何伤害。通常,转义所有字符串值是好的,最好是转义一个不必要的情况,而不是忘记一个。你是对的。我查看了页面中PHP部分的代码,在数组的“dictionary”对象中发现了一个bug。您正在使用isset检查数组\u键\u是否存在。这是错误的,因为$a['null']=null;isset$a['null']将在数组\u key\u存在时返回FALSE'null',$a将返回TRUE,因为数组key确实存在exists@paddySimpleSHA-2是为密码哈希而设计的,速度很快。如果要使用SHA-2,需要使用PBKDF-SHA-2或基于SHA-2的加密算法。bCryptOp错误命名的河豚是专为密码散列和缓慢。即使使用等效的工作因子bcrypt比基于SHA-2的算法更好。@简单的SHA-2是为密码哈希而设计的,速度很快。如果要使用SHA-2,需要使用PBKDF-SHA-2或基于SHA-2的加密算法。bCryptOp错误命名的河豚是专为密码散列和缓慢。即使使用等效功因数,bcrypt也优于基于SHA-2的算法。