简单的密码加密
有什么好的,简单的加密方案可以保护数据库中的密码?我不一定需要超级安全的东西,也不需要闪电般快速的东西,但是那些东西会很好。首先,我只想要易于实施而又不会太慢或者不安全的东西。
解决方案
回答
MD5或者SHA1 +盐。
回答
将SHA单向哈希算法与唯一的salt一起使用。这是我用于将密码存储在数据库中的主要算法。
回答
如果我们使用MD5或者SHA1,请使用盐避免彩虹表被黑。
在C中,这很容易:
MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider(); string addSalt = string.Concat( "ummm salty ", password ); byte[] hash = hasher.ComputeHash( Encoding.Unicode.GetBytes( addSalt ) );
回答
如果我们使用的是SQL Server,则有HashBytes函数:
http://msdn.microsoft.com/en-us/library/ms174415.aspx
回答
杰夫(Jeff)的"我们可能存储密码错误"一文是关于此主题的出色阅读。
回答
我以一票通过对MD5或者SHA的投票。任何主要的Web开发语言都具有用于计算哈希的内置函数(例如,在PHP中,mcrypt包包含必需的函数)。
回答
我们需要使用上面建议的带有盐的单向哈希算法,如SHA-1. 我建议这个网站了解更多信息。它包括一些示例代码/实现。
http://www.obviex.com/samples/hash.aspx
回答
正如mk所说,SHA1或者MD5以及SHA2都是标准的。
通常,我们想要的是加密哈希函数。密码散列被设计为单向(鉴于产生的散列,我们不应该能够得出原始输入)。同样,两个具有相同哈希值的任意字符串的可能性(称为哈希冲突)应该较低(理想情况下为哈希值的1 /数量)。
不幸的是,仅仅因为密码被哈希处理并不能使我们摆脱繁琐的工作来确保哈希处理版本的安全。太多的人会使用弱密码,这些弱密码容易受到离线暴力攻击的攻击。
编辑中的几个人也已经指出了使用盐的重要性。盐是在使用哈希函数之前与输入混合的常数值。使用独特的盐可以防止脱机攻击者使用预先计算的常用密码表(彩虹表)更快地强行使用密码。
回答
简单:BCrypt。
回答
我认为,提高安全性的关键是使用动态盐。这意味着我们将为每个新用户生成一个随机字符串,并使用该字符串为哈希加盐。当然,我们需要将此盐存储在数据库中,以便以后可以验证密码(我不以任何方式对其进行加密)。
回答
几个星期前,这是我的问题。
我们正在将大型MIS项目部署到975个不同的地理位置,在这些地理位置中,我们自己的用户凭据存储将用作不同组已实施和在使用中的应用程序的身份验证器。我们已经提供了基于REST和SOAP的身份验证服务,但是客户坚持认为,仅通过与相关表或者视图的只读视图之间的数据库连接即可从其他应用程序访问用户凭证存储。感叹……(这个高度耦合的不良设计决策是另一个问题的主题)。
这就迫使我们坐下来,然后将盐化的迭代哈希密码存储方案转换为规范,并提供一些不同的语言实现以方便集成。
我们简称为"相当安全的哈希密码"或者FSHP。
在Python,Ruby,PHP5中实现了它,并将其发布到Public Domain。可在GitHub上进行消耗,分叉,燃烧或者吐痰,网址为http://github.com/bdd/fshp
FSHP是一种盐化,迭代哈希加密的密码哈希实现。
设计原理与RFC 2898中的PBKDF1规范相似
(又名:PKCS#5:基于密码的密码规范2.0版。)
FSHP允许选择盐的长度,迭代次数和
SHA-1和SHA-2之间的基础加密哈希函数(256、384、512)。
在每个输出的开始处自定义元前缀使它可移植,同时让使用者选择自己的密码存储安全性基准。
安全:
默认FSHP1使用8字节盐,具有SHA-256哈希的4096次迭代。
8字节盐会使乘以
所需空间为2 ^ 64.
4096次迭代导致蛮力攻击相当昂贵。
没有针对SHA-256的已知攻击来发现与
在计算时,少于2 ^ 128个运算的计算量
这个版本。
- Python:经过2.3.5(w / hashlib),2.5.1、2.6.1的测试
- Ruby:经过1.8.6测试
- PHP5:已通过5.2.6测试
实施:
非常欢迎每个人创建缺少的语言实现或者
擦亮当前的。
>>> fsh = fshp.crypt('OrpheanBeholderScryDoubt') >>> print fsh {FSHP1|8|4096}GVSUFDAjdh0vBosn1GUhzGLHP7BmkbCZVH/3TQqGIjADXpc+6NCg3g== >>> fshp.validate('OrpheanBeholderScryDoubt', fsh) True
基本操作(使用Python):
自定义密码:
>>> fsh = fshp.crypt('ExecuteOrder66', saltlen=2, rounds=10, variant=0) >>> print fsh {FSHP0|2|10}Nge7yRT/vueEGVFPIxcDjiaHQGFQaQ==
回答
让我们削弱密码哈希方案。
将盐的长度从默认的8减少到2.
将迭代次数从默认的4096减少到10.
选择具有SHA-1的FSHP0作为基础哈希算法。
回答
对于不可逆加密,我绝对会选择SHA256或者SHA1. MD5现在有很多冲突,并且在解决它方面已经付出了很多努力,因此不是一个好用的工具。
如果我们想使解决方案适应未来需求,建议我们使用SHA256或者SHA512. 加密极客世界正在引起关于MD5的担忧,而在较小程度上影响SHA1的关注。
段落数量不匹配