Php 好的加密散列函数
可能重复:Php 好的加密散列函数,php,hash,passwords,crypt,Php,Hash,Passwords,Crypt,可能重复: 我正在制作一个网站,我需要一个安全的算法来存储密码。 我首先想到的是bcrypt,但后来我发现我的主机不支持它,我无法更改主机 我的主机允许此加密: 标准DES 这些散列: MD5 md2、md4和md5 sha1、SH256、SH384和SH512 ripemd128、ripemd160、ripemd256和ripemd360 漩涡 老虎128,3,老虎160,3,老虎192,3,老虎128,4,老虎160,4和老虎192,4 斯奈弗鲁 戈斯特 阿德勒32 crc32和cr
我正在制作一个网站,我需要一个安全的算法来存储密码。 我首先想到的是bcrypt,但后来我发现我的主机不支持它,我无法更改主机 我的主机允许此加密:
- 标准DES
- MD5
- md2、md4和md5
- sha1、SH256、SH384和SH512
- ripemd128、ripemd160、ripemd256和ripemd360
- 漩涡
- 老虎128,3,老虎160,3,老虎192,3,老虎128,4,老虎160,4和老虎192,4
- 斯奈弗鲁
- 戈斯特
- 阿德勒32
- crc32和crc32b
- 哈瓦那128,3,哈瓦那160,3,哈瓦那192,3,哈瓦那224,3,哈瓦那256,3,哈瓦那128,4,哈瓦那192,4,哈瓦那224,3,哈瓦那256,4,哈瓦那128,5,哈瓦那160,5,哈瓦那192,5,哈瓦那224,5&哈瓦那256,5
所以,你们中有谁能用它和salt来修正一个好的算法吗?你们根本不应该存储加密(甚至是未加密)的密码。相反,最好使用SHA2-512(拉伸,例如使用) 以下是所列哈希的分类(有关详细信息,请参阅): 加密(不是散列函数):DES
非加密校验和(可笑):adler32、crc32、crc32b
断裂:MD2、MD4、MD5、SHA1
可能已破碎:老虎、斯奈夫鲁、戈斯特、哈弗*
可能安全:SHA2-256/384/512、RIPEMD-128/256、RIPEMD-160/320、惠而浦
请注意,强度指的是找到与已知哈希匹配的任何密码的攻击(预映像攻击)。此外,上述排序是偏执的,会立即丢弃任何已知漏洞的散列。crc32、adler32等都不是为了加密安全而设计的——它们只是快速校验和算法。我认为咸SHA-256应该提供安全性和兼容性的良好结合 有一次,我记得在一台速度较慢的服务器上使用salted MD5时,预期会有中等负载。所以我决定用一个32位的随机盐填充它,并将整个内容存储为十六进制——它给人的印象是整个内容都是未加盐的SHA-1。我真诚地希望有人浪费宝贵的时间在偷来的垃圾堆上跑彩虹桌 安全性并不仅仅是更昂贵的散列:)你应该
- 用盐作为你的杂烩的一部分
- 使用10000+迭代范围内的迭代例程。例如,PBKDF#2
- 使用已知的强散列(SHA-256、SHA-512)
如果要存储登录到外部系统的密码,则需要加密密码,并在需要时解密密码。DES是您在这里唯一的实际选择,除非您也有3DE(也称为三重DES或DESede)可用。我很惊讶AES/Rijndael不可用。如果是us,则优先于DES。您应将密码存储为上述哈希,而不是加密密码 哈希函数基本上是一种单向转换,它总是为相同的输入参数生成相同的哈希。不可能将哈希转换回其原始形式,否则将认为哈希函数已损坏 加密是一种双向转换,如果您有密钥,可以将加密数据转换回原始形式 通过将密码存储为散列,并且由于密码是单向转换的,因此即使有人获得数据库,也无法提取密码
检查密码时,只需使用存储密码中使用的哈希函数对其进行转换,然后对照数据库进行检查。您想要什么?加密还是散列?此外,md5是一个散列,而不是加密。请注意,它一定有很好的信息读取。使用sha256或sha512,迭代,然后使用它…我不确定加密和哈希之间的区别,但是你描述的方式我想是散列。@Snacker:我上面链接的答案非常详细地描述了两者的区别……这个问题同时提到了散列和salt……有时为了能够登录到外部系统,需要存储加密的密码。@Wooble这个问题是关于如何存储密码的。加密不是答案,如我之前的评论所述。@hanshenrik包括复杂度为2^47的16轮精简老虎的完全冲突,以及复杂度为2^47的24轮老虎的伪冲突。这并不意味着Tiger在SHA-1级别(基本上每个人都可以进行预映像攻击)被打破,但我对这些安全裕度感到不舒服。我很有可能误解了什么。非常接近,但不是完全接近,再近一点看,这是23轮的伪碰撞,不是24轮。。但在这个时代,让人不舒服的不雅行为从来都不是一种选择。在PHP领域使用DES比使用DES更好,DES是非常容易被破坏的…通过模糊性实现的安全性(padding方法实际上就是这样)不是安全性。这可能会让你在晚上感觉更好,但最终并不会让它变得更安全。当你把它和什么时候被破坏的概念结合在一起时(这将是,它只需要时间),由于ea,每个人的密码都会更容易被暴力破解