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

时间:2015-07-20 08:16:59

标签: php

<?php $hash = password_hash("漢字", PASSWORD_DEFAULT); ?> 与unicode字符一起使用是否安全,或者存在不兼容问题?

<?php
   if($_POST && isset($_POST['fName'])) {
      $people = count($_POST['fName']);
      for($i=0; $i<$people; $i++) {
          echo "<p>first name: {$_POST['fName'][$i]}, last name: {$_POST['lName'][$i]} ...</p>";
      }
   }

1 个答案:

答案 0 :(得分:4)

散列算法本身可以处理字节,因此它们是unicode安全的,正如Mark评论的那样。唯一的问题可能是PHP处理unicode字符串,即密码散列函数binary-safe?让我们测试一下并找出:

<?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";

结果:

Pass: 100
Fail: 0

您的问题的答案是,这是安全的。