究竟如何在PHP中使用blowfish? [重复]

问题描述 投票:9回答:3

这个问题在这里已有答案:

可能重复: Best way to use PHP to encrypt and decrypt passwords?

我最近用PHP做了很多事情,想要建立我的第一个登录/注册系统。因此,我一直在网上做很多阅读,以找出实现这一目标的最佳方法。我遇到了几个指南,我对几个实例感到困惑,在开始这条路之前我想确定一下。

我的问题是我究竟如何使用河豚?我已经读过如果提供适当的盐,crypt()将自动选择河豚。如果是这样的话,是什么让盐河豚适合?

现在,我有一个脚本,它从日期和时间中取出一个盐,一个随机数,然后哈希为盐。那是否可以与河豚一起使用?

php hash passwords blowfish crypt
3个回答
6
投票

看看http://php.net/manual/en/function.crypt.php

如果向下滚动约1/3,您应该看到标题:Example #3 Using crypt() with different hash types。希望这会有所帮助!你的盐应该没问题!


12
投票

简而言之:不要自己构建它。使用图书馆。

在PHP 5.5中,将有一个新的API可以使您更轻松地完成此过程。这是RFC for it

我还在这里为它创建了一个向后兼容的库:password-compat

$hash = password_hash($password, PASSWORD_BCRYPT);

然后验证:

if (password_verify($password, $hash)) {
    /* Valid */
} else {
    /* Invalid */
}

如果你想要另一个图书馆,请查看phpass

简而言之,不要自己动手。没有必要。只需导入库并完成它...


-3
投票

试试这个 - 它未经测试,我只是鞭打它以展示如何使用PHP的BLOWFISH算法

<?php
class cipher {
private static $mode = 'MCRYPT_BLOWFISH';
private static $key = 'q!2wsd#45^532dfgTgf56njUhfrthu&^&ygsrwsRRsf';

public static function encrypt($buffer){
    $iv                 = mcrypt_create_iv(mcrypt_get_iv_size(constant(self::$mode), MCRYPT_MODE_ECB), MCRYPT_RAND); 
    $passcrypt  = mcrypt_encrypt(constant(self::$mode), self::$key, $buffer, MCRYPT_MODE_ECB, $iv); 
    $encode         = base64_encode($passcrypt); 
    return $encode; 
}

public static function decrypt($buffer){
    $decoded        = base64_decode($buffer); 
    $iv                 = mcrypt_create_iv(mcrypt_get_iv_size(constant(self::$mode), MCRYPT_MODE_ECB), MCRYPT_RAND); 
    $decrypted  = mcrypt_decrypt(constant(self::$mode), self::$key, $decoded, MCRYPT_MODE_ECB, $iv);
    return $decrypted;
}
}
?>

重要!!更改$ key值到另一个随机字符串!

用法:

要加密:

$ mystring ='快速的棕色狐狸跳过懒惰的骆驼'; $ mystring = cipher :: encrypt($ mystring);

要解密:

$ mystring = cipher :: decrypt($ myencryptedstring);

© www.soinside.com 2019 - 2024. All rights reserved.