BCRYPT哈希的字符池范围是什么?PHP环境下技术问询
BCRYPT哈希(PHP password_hash生成)的合法字符集
首先明确:PHP通过password_hash($password, PASSWORD_BCRYPT)生成的BCRYPT哈希,其字符集遵循BCRYPT特有的Base64编码规则,并非任意ASCII字符,也不包含你提到的*、\这类字符。
合法字符范围
BCRYPT哈希仅包含以下字符:
- 符号:
$、.、/ - 数字:
0-9 - 大写字母:
A-Z - 小写字母:
a-z
依据说明
PHP的PASSWORD_BCRYPT实现底层依赖crypt()函数的BCRYPT算法,而该算法使用的是修改版Base64编码:
- 替换标准Base64的
+为.,保留/ - 编码后的字符严格从上述集合中选取,不会出现
=、¬或其他UTF-8字符 - 完整BCRYPT哈希格式为
$2y$xx$[22字符salt][31字符哈希],整个字符串的每一位都属于上述字符集
正则清理示例
若要清理字符串,仅保留合法的BCRYPT哈希字符,可使用如下正则:
$cleanedHash = preg_replace('/[^$.\/0-9A-Za-z]/', '', $inputString);
补充说明
PHP环境下password_hash生成的BCRYPT哈希不会触发旧版crypt的特殊场景(如*0/*1返回值),因此无需考虑*这类额外字符。
内容的提问来源于stack exchange,提问作者Mm-Art-In
相关产品推荐
相关产品推荐

