使用带有unicode字符的password_hash是否安全?

use*_*459 9 php

可以安全地使用password_hash如下的unicode字符或存在不兼容问题吗?

<?php
$hash = password_hash("??", PASSWORD_DEFAULT);
?>
Run Code Online (Sandbox Code Playgroud)

Mat*_*t S 4

正如 Mark 所评论的,哈希算法本身对字节起作用,因此它们是 unicode 安全的。唯一的问题可能是 PHP 对 unicode 字符串的处理,即密码哈希函数是二进制安全的吗?让我们测试一下并找出答案:

<?php

$pass = 0;
$fail = 0;

# Generate 100 random unicode passwords
for ($i = 0; $i < 100; $i++) {
    $password = '';
    for ($p = 0; $p < 10; $p++) {
        $password .= mt_rand(0xa1, 0xffff);
    }

    # Test password hashing
    $hash = password_hash($password, PASSWORD_DEFAULT);
    if (password_verify($password, $hash)) {
        $pass++;
    } else {
        $fail++;
    }
}

echo "Pass: $pass\nFail: $fail\n";
Run Code Online (Sandbox Code Playgroud)

结果:

Pass: 100
Fail: 0
Run Code Online (Sandbox Code Playgroud)

你的问题的答案是肯定的,它是安全的。