小编Sha*_*Zzz的帖子

在PHP中正确使用带有SHA512的crypt()

在线的所有示例都显示了如下所示的crypt的使用:

$pass = crypt('something','$6$rounds=5000$anexamplestringforsalt$');
Run Code Online (Sandbox Code Playgroud)

但是每个人都说你不应该定义轮次或盐.

那我该怎么用呢?

另外我遇到了一个问题:当我运行上面的代码时,它只运行50轮而不是5000轮,就像系统停止它一样.

任何帮助将不胜感激.

// - 解决方案 - //

我发现其中一些有用:

用于生成盐:

 $salt = substr(str_shuffle("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345??6789"), 0, 8); 
Run Code Online (Sandbox Code Playgroud)

要么

如果你有一个linux服务器,这是一种更随机的生成盐的方法

$fp = fopen('/dev/urandom', 'r');
$randomString = fread($fp, 32);
fclose($fp);
Run Code Online (Sandbox Code Playgroud)

Base 64编码以确保某些字符不会导致crypt出现问题

$salt = base64_encode($randomString);
Run Code Online (Sandbox Code Playgroud)

对于哈希:

$hashed = crypt($passwordInput, '$6$'.$salt);
Run Code Online (Sandbox Code Playgroud)

确认:

if (crypt($passwordInput, $hashed) == $hashed) { 
  // Valid action
} else { 
  // Invalid action
}
Run Code Online (Sandbox Code Playgroud)

**特别感谢@ lathspell帮助我们解决上述问题**

php crypt password-encryption

5
推荐指数
2
解决办法
1万
查看次数

使用LIKE的PDO搜索数据库

我正在尝试使用此代码创建一个小型搜索功能来查看数据库:

$searchQ = 'Li';
$query = $connDB->prepare('SELECT * FROM topic WHERE topic_name LIKE '."':keywords'");
$query->bindValue('keywords', '%' . $searchQ . '%');
$query->execute();  

if (!$query->rowCount() == 0) {
    while ($results = $query->fetch()) {
        echo $results['topic_name'] . "<br />\n";
    }
} else {
    echo 'Nothing found';
}
Run Code Online (Sandbox Code Playgroud)

这将返回数据库中的所有项目,而不仅仅是相似的项目,

然后我运行了这个SQL查询:

SELECT * FROM topic WHERE topic_name LIKE '%Li%';
Run Code Online (Sandbox Code Playgroud)

这按预期运行并返回所需的结果.

我错过了什么?

php mysql pdo

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

php ×2

crypt ×1

mysql ×1

password-encryption ×1

pdo ×1