passwordlib / passwordlib
密码散列库
Requires
- php: >=5.3.2
This package is auto-updated.
Last update: 2024-09-20 00:35:51 UTC
README
构建状态
版本
当前版本被认为是Beta。这意味着它已经足够准备好进行测试和使用,但请注意,您应该频繁更新。
由于此软件为beta版本,请自行承担风险!
关于
PHP-PasswordLib旨在成为满足所有加密需求的综合性加密库。它旨在易于安装和使用,同时足够灵活和强大,以满足经验丰富的开发者。
安装
PasswordLib支持多种安装方法。
PHAR
从下载标签页下载最新的phar构建。然后,只需在您的代码中require phar即可!
require_once '/path/to/PasswordLib.phar';
Composer
将以下内容添加到您的项目中的composer.json
文件:
{
"require": {
"PasswordLib/PasswordLib": "*"
}
}
然后,在该文件夹内,只需运行php composer.phar install
。
然后,在您的代码中,只需使用composer自动加载器
require_once 'vendor/.composer/autoload.php';
这就完成了!
用法
大多数用例可以直接使用根PasswordLib
类。
$lib = new PasswordLib\PasswordLib();
$hash = $lib->createPasswordHash($password);
$boolean = $lib->verifyPasswordHash($password, $hash);
默认情况下,createPasswordHash
将创建一个blowfish散列,这是最安全的。要创建其他类型,只需将类型的前缀作为第二个参数传递。
所以,要创建一个Drupal散列
$hash = $lib->createPasswordHash($password, '$S$');
或者要创建一个SHA512散列
$hash = $lib->createPasswordHash($password, '$6$');
它将自动创建一个安全的盐,并生成散列。
您还可以为散列指定选项。因此,要使用bcrypt成本为12
$hash = $lib->createPasswordHash($password, '$2a$', array('cost' => 12));
verifyPasswordHash
将尝试确定传入的散列类型。因此,一个API调用可以验证多种类型的散列。这使得应用程序可以便携,并通过一个API对多个数据库进行身份验证。
PasswordLib
类还有其他API方法用于获取随机数据。其中两个特别有用的是getRandomNumber
和getRandomToken
。
-
getRandomNumber([$min] [, $max]
- 获取给定参数之间的安全随机整数。 -
getRandomToken($size)
返回一个使用base64字符(a-zA-Z0-9./
)的随机字符串。这对于生成nonce和发送给客户端的令牌非常有用。
该库还包含其他用于生成随机数据和散列数据的函数,所以请查看!
设计目标
-
100% 可移植
这意味着没有对扩展或非标准服务器配置的硬性(即必需)依赖。某些配置可能会在某些功能上提供更好的性能,但所有配置都应该得到支持。
-
设计良好
代码将使用行业标准的设计模式,并遵循编写干净和可测试代码的指南。
-
测试良好
这意味着代码应该被单元测试很好地覆盖。除了单元测试之外,还应该为算法的自定义实现运行标准测试向量,以确保正确的行为。
-
易于安装
PHP-PasswordLib将支持三种安装方法。第一种是基于pear的安装程序。第二种是单个文件的PHAR存档。第三种是通过Composer的支持。
-
易于使用
此系统的目标之一是提供一个简单的接口,该接口为标准加密需求提供安全的默认值(随机令牌生成、密码散列和验证等)。如果需要更多功能,则可以提供额外的抽象层,以满足所需的方式。
-
易于扩展
该库应该非常容易扩展和添加新功能。
功能
可选自动加载
如果您通过PHAR包包含PasswordLib,它将自动为您加载所有类,无需额外步骤。只需
require 'path/to/PasswordLib.phar';
如果您通过文件系统安装包含PasswordLib,您可以通过加载bootstrap.php文件或加载PasswordLib.php文件来使用内部加载器
require_once 'path/to/PasswordLib/bootstrap.php
或
require_once 'path/to/PasswordLib/PasswordLib.php
您也可以使用任何[PSR-0] 3 加载器。PasswordLib将自动检测是否为其命名空间设置了加载器,如果找到,则不会声明自己的加载器(它通过检查是否可以找到PasswordLib\Core\AutoLoader来实现。如果可以找到,则表示已经声明了加载器。如果没有,它将加载核心实现)。
$classLoader = new SplClassLoader('PasswordLib', 'path/to/');
$classLoader->register();
请注意,您提供的路径是包含PasswordLib目录的目录,而不是PasswordLib目录本身。
安全随机数/字符串生成
PHP-PasswordLib实现了[RFC 4086 - 安全的随机性要求] 2中指定的方法。基本上,它从多个伪随机源生成随机性,并将它们“混合”在一起以获得更好的随机数据。当您指定随机生成器的“强度”时,您实际上是在告诉系统您希望使用哪些源。强度越高,使用的源可能越慢且可能越脆弱。
混合函数也依赖于所需的强度。对于非加密数字,使用简单的XOR混合函数(为了速度)。随着强度要求的提高,它将使用基于SHA512的混合函数,然后是基于DES的混合函数,最后在“高”强度时使用基于AES-128的混合函数。
所有这些都被隐藏在简单的API后面。
要生成用户可读的字符串,您可以使用PasswordLib类(默认生成中等强度的数字)
$crypt = new PasswordLib\PasswordLib;
$token = $crypt->getRandomToken(16);
或者您可以使用核心生成器以获得更多控制
$factory = new PasswordLib\Random\Factory;
$generator = $factory->getHighStrengthGenerator();
$token = $generator->generateString(16);
要生成盐,简单使用PasswordLib::getRandomString()或Generator::generate()
密码散列和验证
支持多种密码散列算法。在创建新的散列时,算法通过前缀(CRYPT()风格的散列前缀)选择。库将完成其余工作(盐生成等)
$crypt = new PasswordLib\PasswordLib;
$hash = $crypt->createPasswordHash($password, '$2a$'); // Blowfish
$hash = $crypt->createPasswordHash($password, '$S$'); // Drupal
在验证密码散列时,尽可能自动检测使用的算法并验证。这意味着它非常简单
$crypt = new PasswordLib\PasswordLib;
if (!$crypt->verifyPasswordHash($password, $hash)) {
//Invalid Password!
}
您可以跳过自动检测并手动验证
$hasher = new PasswordLib\Password\Implementation\Joomla;
$hash = $hasher->create($password);
if (!$hasher->verify($password, $hash)) {
//Invalid Hash!
}
规范
-
支持的密码存储函数
- APR1 - Apache的内部密码函数
- Blowfish - BCrypt
- Crypt - Crypt DES散列
- Drupal - 基于SHA512的Drupal算法
- Hash - 通过长度检测的原始md5、sha1、sha256和sha512
- Joomla - 基于MD5的Joomla算法
- Crypt MD5 - 对Crypt的MD5算法的支持
- PBKDF - PBKDF实现(支持任何支持的基于密码的密钥派生)
- PHPASS - PHPASS库的可移植散列的实现
- PHPBB - 基于MD5的PHPBB算法
- Crypt SHA256 - Crypt的SHA256算法
- Crypt SHA512 - Crypt的SHA512算法
-
支持的随机数来源
- CAPICOM - 在Windows系统上可用的COM对象方法调用
- MTRand - 基于mt_rand()函数的生成
- MicroTime - 基于服务器microtime的低熵源
- Rand - 基于rand()的低熵源
- URandom - 从系统的/dev/urandom源生成
- UniqID - 基于uniqid()的低熵源
库依赖
PHP-PasswordLib作为库使用的唯一依赖项是PHP版本。它被设计为完全独立于扩展,尽可能实现原生功能。
必需
- PHP >= 5.3.2
可选
- [MCrypt] 1 编译进
构建(测试)依赖项
这些依赖项对于构建您环境的项目是必要的(包括运行单元测试、打包和代码质量检查)
Pear 依赖项
-
PDepend 通道(pear.pdepend.org)
- pdepend/PHP_Depend >= 0.10.0
-
Phing 通道(pear.phing.info)
- phing/Phing >= 2.4.0
-
PHPMD 通道(pear.phpmd.org)
- phpmd/PHP_PMD >= 1.1.0
-
PHPUnit 通道(pear.phpunit.de)
- phpunit/PHPUnit >= 3.5.0
- phpunit/PHP_CodeBrowser >= 1.0.0
- phpunit/phpcpd >= 1.3.0
- phpunit/phploc >= 1.6.0
-
PHP-Tools 通道(pear.php-tools.net)
- pat/vfsStream >= 0.8.0
-
默认 Pear 通道
- pear/PHP_CodeSniffer >= 1.3.0
- pear/PHP_UML >= 1.5.0
注意:您可以使用以下命令安装所有这些依赖项
pear channel-discover pear.pdepend.org
pear channel-discover pear.phing.info
pear channel-discover pear.phpmd.org
pear channel-discover pear.phpunit.de
pear channel-discover pear.php-tools.net
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
pear install pdepend/PHP_Depend
pear install phpmd/PHP_PMD
pear install pat/vfsStream
pear install PHP_CodeSniffer
pear install PHP_UML
pear install phpunit/PHPUnit
pear install phpunit/PHP_CodeBrowser
pear install phpunit/phpcpd
pear install phpunit/phploc
pear install phing/Phing
PHP 依赖项
-
PHP >= 5.3.2
php.ini
设置phar.readonly = Off
-
PHP 扩展
- XDebug
- MCrypt
- Hash(通常已启用)
- Phar
- Zip(用于打包)
- BZ2(用于打包)
- XSL(用于文档)
安全漏洞
如果您发现了一个安全问题,请直接联系作者 [email protected]。