首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用php crypt()加密

用php crypt()加密
EN

Stack Overflow用户
提问于 2014-06-29 13:18:24
回答 1查看 234关注 0票数 1

我有这个密码

代码语言:javascript
复制
<?php
error_reporting(E_ALL);
    $caratteri_disponibili ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
    $lunghezza= 50;
    $code = "";
    for($i = 0; $i<$lunghezza; $i++){
        $code = $code.substr($caratteri_disponibili,rand(0,strlen($caratteri_disponibili)-1),1);
    }
$hashed_password = crypt('mypassword',$code); 
?>

用随机盐加密密码。Error_reporting不会将任何错误通知我,但是当我试图检查哈希密码是否与使用此代码的其他输入匹配时(放入上一段代码的同一页)

代码语言:javascript
复制
<?php
$input = "Hey";
if (crypt($input, $hashed_password) == $hashed_password) {
   echo "Password verified!";
}
?>

我被告知“密码已确认!”即使我不应该。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-29 13:59:24

选择算法的机制是为$salt提供给定的语法。例如,要选择Blowfish,您必须遵循以下规则:

河豚用盐散列如下:"$2a$","$2x$“或"$2y$",一个两位数的成本参数,$ "$",以及字母表中的22个字符。..。两位数的成本参数是底层基于Blowfish的散列算法的迭代计数的基-2对数,必须在04-31范围内,超出此范围的值将导致crypt()失败。

您的salt (您称之为$code)是一个随机的50字节字母数字字符串,它似乎与手册中定义的任何规则不匹配,所以可能发生的情况如下:

  • 函数默认为给定的算法。
  • 这样的算法忽略了额外的字符。

更糟糕的是,一些旧的散列算法具有最大字符串大小。

回退算法可能是CRYPT_STD_DES

标准的基于DES的散列,从字母表中带有两个字符的盐分"./0-9A-Za-z“。

在我的系统中,只考虑密码的前8个字节:

代码语言:javascript
复制
var_dump( crypt('00000000 does not matter', 'aa does not matter') );
var_dump( crypt('00000000 how long passwords are', 'aa what I write here') );
var_dump( crypt('00000000 only 8 bytes count', 'aa because only first two bytes are used') );
代码语言:javascript
复制
string(13) "aaJfK9SF.cm2o"
string(13) "aaJfK9SF.cm2o"
string(13) "aaJfK9SF.cm2o"

解决方案:不要让系统为您选择默认值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24476407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档