源码分享站 - 分享有用的

fatfree 展示 bcrypt.php源代码

返回 下载fatfree: 单独下载bcrypt.php源代码 - 下载整个fatfree源代码 - 类型:.php文件
  1. <?php
  2.  
  3. /**
  4. *       Lightweight password hashing library
  5. *
  6. *       Copyright (c) 2009-2016 F3::Factory/Bong Cosca, All rights reserved.
  7. *
  8. *       This file is part of the Fat-Free Framework (http://fatfreeframework.com).
  9. *
  10. *       This is free software: you can redistribute it and/or modify it under the
  11. *       terms of the GNU General Public License as published by the Free Software
  12. *       Foundation, either version 3 of the License, or later.
  13. *
  14. *       Fat-Free Framework is distributed in the hope that it will be useful,
  15. *       but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. *       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17. *       General Public License for more details.
  18. *
  19. *       You should have received a copy of the GNU General Public License along
  20. *       with Fat-Free Framework.  If not, see <http://www.gnu.org/licenses/>.
  21. *
  22. *       @deprecated use http://php.net/manual/en/ref.password.php instead (PHP 5.5+ only)
  23. **/
  24.  
  25. class Bcrypt extends Prefab {
  26.  
  27.         //@{ Error messages
  28.         const
  29.                 E_CostArg='Invalid cost parameter',
  30.                 E_SaltArg='Salt must be at least 22 alphanumeric characters';
  31.         //@}
  32.  
  33.         //! Default cost
  34.         const
  35.                 COST=10;
  36.  
  37.         /**
  38.         *       Generate bcrypt hash of string
  39.         *       @return string|FALSE
  40.         *       @param $pw string
  41.         *       @param $salt string
  42.         *       @param $cost int
  43.         **/
  44.         function hash($pw,$salt=NULL,$cost=self::COST) {
  45.                 if ($cost<4 || $cost>31)
  46.                         user_error(self::E_CostArg,E_USER_ERROR);
  47.                 $len=22;
  48.                 if ($salt) {
  49.                         if (!preg_match('/^[[:alnum:]\.\/]{'.$len.',}$/',$salt))
  50.                                 user_error(self::E_SaltArg,E_USER_ERROR);
  51.                 }
  52.                 else {
  53.                         $raw=16;
  54.                         $iv='';
  55.                         if (extension_loaded('mcrypt'))
  56.                                 $iv=mcrypt_create_iv($raw,MCRYPT_DEV_URANDOM);
  57.                         if (!$iv && extension_loaded('openssl'))
  58.                                 $iv=openssl_random_pseudo_bytes($raw);
  59.                         if (!$iv)
  60.                                 for ($i=0;$i<$raw;$i++)
  61.                                         $iv.=chr(mt_rand(0,255));
  62.                         $salt=str_replace('+','.',base64_encode($iv));
  63.                 }
  64.                 $salt=substr($salt,0,$len);
  65.                 $hash=crypt($pw,sprintf('$2y$%02d$',$cost).$salt);
  66.                 return strlen($hash)>13?$hash:FALSE;
  67.         }
  68.  
  69.         /**
  70.         *       Check if password is still strong enough
  71.         *       @return bool
  72.         *       @param $hash string
  73.         *       @param $cost int
  74.         **/
  75.         function needs_rehash($hash,$cost=self::COST) {
  76.                 list($pwcost)=sscanf($hash,"$2y$%d$");
  77.                 return $pwcost<$cost;
  78.         }
  79.  
  80.         /**
  81.         *       Verify password against hash using timing attack resistant approach
  82.         *       @return bool
  83.         *       @param $pw string
  84.         *       @param $hash string
  85.         **/
  86.         function verify($pw,$hash) {
  87.                 $val=crypt($pw,$hash);
  88.                 $len=strlen($val);
  89.                 if ($len!=strlen($hash) || $len<14)
  90.                         return FALSE;
  91.                 $out=0;
  92.                 for ($i=0;$i<$len;$i++)
  93.                         $out|=(ord($val[$i])^ord($hash[$i]));
  94.                 return $out===0;
  95.         }
  96.  
  97. }
  98.  
单独下载 单独下载bcrypt.php源码 - 下载整个fatfree源程序
相关源码/软件:
TSA-Travel-Sentry-master-keys - TSA 主密钥的 3D 再现 2017-05-12
python3-cookbook - 《Python Cookbook》 3rd Edition Translatio 2017-05-12
isso - Disqus 替代 https://posativ.org/isso/ 2017-05-12
hologram - 降价基于文件系统的风格指南。 http://trulia.github.io... 2017-05-12
www.html5rocks.com - .......a 争创一流资源为 web 开发人员 2017-05-12
rolify - Role management library with resource scoping ... 2017-05-13
jquery-mockjax - JQuery Mockjax 插件提供了简单、 极其灵活的接口,以嘲笑或模拟 ajax 请求和响应 2017-05-13
yo - CLI 工具运行自耕农发电机 http://yeoman.io 2017-05-13
GrowingTextView - UITextView 增长/收缩与文本并开始滚动时的含量达到一定数量的行。类似于苹果在 SMS 应用... 2017-05-13
phan - 潘是 php 的静态分析器。潘倾向于避免误报,并试图证明不正确,而不是正确性。 2017-05-13
CRYENGINE - CRYENGINE 是由 Crytek 创建一个功能强大的实时游戏开发平台。 ... 2017-06-11
postal - 2017-06-11
reactide - Reactide 是反应 web 应用程序开发的第一个专用的 IDE。http://reactide... 2017-06-11
rkt - rkt 是为 Linux 的 pod 本机容器引擎。它是可组合、 安全和建筑标准。 2017-06-11
uWebSockets - 小小的 Websocket https://forest.webvrexpe... 2017-06-11
realworld - 真实的世界-动力反应、 角、 节点,Django,和更多的模范 fullstack Medium.c... 2017-06-11
goreplay - GoReplay 是用于捕获和重播活 HTTP 交通到测试环境以不断地测试您的系统与实际数据的开源工... 2017-06-10
pyenv - 简单的 Python 版本管理 2017-06-10
redux-saga - Redux 应用程序替代副作用模型 https://redux-saga.g... 2017-06-10
angular-starter - 2017-06-10

 返回顶部