我四处搜索,但找不到一个很好的资源来介绍整个 Blowfish 的实现过程。
我使用的是 5.3.8,所以我知道我可以使用 crypt() 函数,并且我需要向它传递一个盐,形式为
$2[x,y,a]$[base 2 log of rounds]$[some string]
但是我在某处读到,您每次都需要唯一地生成盐。这是否意味着您必须将盐存储在数据库中?如果有人窃取了您的数据库,您与使用 shaX 的情况不同吗?所有这些到底是如何工作的。
还
我一直在阅读 Blowfish 也用于解密密码。我理解它只是一种散列算法,您可以在其中加密两个字符串,然后检查它们是否匹配。您如何以及为什么要使用可以解密的算法?