使用没有crypt的Blowfish密码()

时间:2014-08-17 12:29:31

标签: php encryption blowfish

实际上,出于测试和挑战的目的,我试图编写一个小密码加密系统。

我已经阅读了关于河豚算法的内容,我对它很感兴趣,在阅读the wikipedia page about it之后,我认为该算法应该是我想要的算法。但是php的crypt()函数完成了所有"脏工作"为了你。根据我在维基百科中读到的内容,Blowfish是一个对称的密钥密码,这意味着你可以使用相同的密钥对其进行加密并解密(如果我错了,请纠正我),所以我正在寻找一种方法, php,它允许你使用blowfish作为他最原始的形式:类似于:

blowfis($data, $key, $rounds);

我非常确定这样的图书馆存在,但经过一些谷歌搜索我没有找到任何人。这样的lib存在吗?或者我自己写这个功能,我确定,真的很复杂吗?

所以我的问题是:是否可以使用没有crypt()的河豚?如果是,怎么样?有特定的图书馆吗?或者使用原生的Php功能?

1 个答案:

答案 0 :(得分:-3)

如果您的PHP版本为> = 5.5 ,请考虑使用 password_hash password_verify 方法加密和验证密码。 password_hash也与crypt()兼容。

试试这个:

$options = array(
    'salt' => 'Your very secret static salt here',
    'cost' => 12,
    );
$pass = password_hash("passwordProvided", PASSWORD_BCRYPT, $options);

此时,$pass变量保留了passwordProvided的散列版本,看起来像是这样的:

$2y$10$WW91ciB2ZXJ5IHNlY3Jld.w58GyS1ueaPDQ.93.N2PWoiRvJ12GiK

验证密码;

$hashed = '$2y$10$WW91ciB2ZXJ5IHNlY3Jld.w58GyS1ueaPDQ.93.N2PWoiRvJ12GiK';

if(password_verify('passwordProvided', $hashed)) {
    // Password is valid.
}

注意:将cost参数增加1,可以将计算哈希值所需的时间加倍。