Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何准确地在php中实现Blowfish_Php_Encryption_Blowfish - Fatal编程技术网

如何准确地在php中实现Blowfish

如何准确地在php中实现Blowfish,php,encryption,blowfish,Php,Encryption,Blowfish,我四处搜索,找不到一个好的资源,它贯穿了整个河豚的实现过程 我使用的是5.3.8,所以我知道我可以使用crypt()函数,我需要向它传递一个salt,它的形式是 $2[x,y,a]$[基本2轮数日志]$[一些字符串] 但我在某个地方读到,你每次都需要生成唯一的盐。这是否意味着您必须将盐存储在数据库中?如果有人偷了你的数据库,你的处境不是和使用shaX时一样吗?这一切到底是如何运作的 也 我一直在读到河豚也被用来解密密码。我把它理解为一种散列算法,对两个字符串进行加密,然后检查它们是否匹配。您将如

我四处搜索,找不到一个好的资源,它贯穿了整个河豚的实现过程

我使用的是5.3.8,所以我知道我可以使用crypt()函数,我需要向它传递一个salt,它的形式是

$2[x,y,a]$[基本2轮数日志]$[一些字符串]

但我在某个地方读到,你每次都需要生成唯一的盐。这是否意味着您必须将盐存储在数据库中?如果有人偷了你的数据库,你的处境不是和使用shaX时一样吗?这一切到底是如何运作的


我一直在读到河豚也被用来解密密码。我把它理解为一种散列算法,对两个字符串进行加密,然后检查它们是否匹配。您将如何以及为什么使用可以解密的算法?

Salt保护您免受彩虹表攻击,因此可以将Salt存储在同一数据库中

本质上,彩虹表是一个巨大的表,包含数百万个预先计算的哈希。因此,如果密码是'some_pass',哈希值是'ABC123',攻击者会查看彩虹表中的'ABC123',他会看到'some_pass'正在生成此哈希值

如果您使用salt,攻击者将拥有哈希和salt,但此彩虹表无法工作。彩虹表包含通用密码和/或1-6(或更多)个字符的所有组合。因此,如果你散列“some_pass_usalt_123123”,你可以看到攻击者不会幸运地使用彩虹表

至于实现自己的河豚,我希望这是为了学习(家庭作业?)。否则,实现自己的安全算法几乎总是一个坏主意,因为你不是领域专家,你会错过一些模糊的细节


请注意,在调用crypt()时,您可能还需要验证实际使用的加密算法。MD5不再是安全的,它可以用一个好的GPU来破解(没有输入错误,你可以用你的图形卡来破解散列)。SHA-1已经被破坏,但在计算上很难做到(军方可以做到);因此,不建议使用SHA-1系列。瞄准SHA-2系列。

salt就在那里,用于防止预计算表(又称彩虹表)攻击。PHP5.5将支持一个易于使用的API来处理具有良好默认值的哈希密码。如果您使用的是PHP5.3.7+,我建议您使用“如何以及为什么使用可以解密的算法?”哈希!=加密。散列是一种方法。您还没有搜索到足够的内容,请参见:和