popphp / pop-crypt
Pop PHP 框架的 Pop Crypt 组件
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.6.*
README
生命终结
pop-crypt 组件 v2.1.1 现已生命终结,将不再维护。
概述
pop-crypt 提供了各种接口,以辅助创建和验证加密散列。支持的加密散列有
- 加密
- Bcrypt
- Md5
- Sha
- Mcrypt (双向散列)
pop-crypt 是 Pop PHP 框架 的一个组件。
安装
使用 Composer 安装 pop-crypt。
composer require popphp/pop-crypt
基本用法
使用 Crypt 创建和验证散列
使用 crypt 是创建加密散列最简单的方式。为了更好的安全性,最好使用强随机盐。
$crypt = new Pop\Crypt\Crypt(); $crypt->setSalt($crypt->generateRandomString(32)); $hash = $crypt->create('my-password'); // Outputs 'Lx8nDfxK6TbQg' echo $hash; if ($crypt->verify('bad-password', $hash)) {} // Returns false if ($crypt->verify('my-password', $hash)) {} // Returns true
使用 Bcrypt 创建和验证散列
Bcrypt 被认为是创建加密散列的一种较强大的方法。使用它,你可以指定前缀和性能成本。成本越高,散列越强。然而,成本越高,生成散列所需的时间越长。成本范围值在 '04' 和 '31' 之间。
同样,为了更好的安全性,最好使用强盐。实际上,使用强随机字符串作为盐是一个最佳实践。如果你没有指定,Bcrypt 类会自动为你生成盐。
$bcrypt = new Pop\Crypt\Bcrypt(); $bcrypt->setCost('12') ->setPrefix('$2y$'); $hash= $bcrypt->create('my-password'); // Outputs '$2y$12$OHZtOTlrNG1UTE5wUmpGQO2WJPFSzkhDErx2UHOvFEwU8/NosVYDe' echo $hash; if ($bcrypt->verify('bad-password', $hash)) {} // Returns false if ($bcrypt->verify('my-password', $hash)) {} // Returns true
使用 Md5 创建和验证散列
这不要与 PHP 内置的基本 md5()
函数混淆。不建议使用该函数进行密码散列,因为它只生成一个 32 位的十六进制数,且容易受到字典攻击。
如前所述,为了更好的安全性,最好使用强盐。实际上,使用强随机字符串作为盐是一个最佳实践。与 Bcrypt 一样,如果未指定,Md5 类会自动为你生成随机盐。
$md5 = new Pop\Crypt\Md5(); $hash = $md5->create('my-password'); // Outputs '$1$TlBKWGtw$zdivNfpOUPWwJ3a1cUM1E/' echo $hash; if ($md5->verify('bad-password', $hash)) {} // Returns false if ($md5->verify('my-password', $hash)) {} // Returns true
使用 Sha 创建和验证散列
这不要与 PHP 内置的基本 sha1()
函数混淆。与 md5()
一样,不建议使用该函数进行密码散列,因为它只生成一个 40 位的十六进制数,且容易受到字典攻击。
使用 Sha 类,你可以设置位数(256 或 515)和轮数(介于 1000 和 999999999 之间),这将影响散列的性能和强度。
与之前一样,最好使用强盐以提高安全性。实际上,使用强随机字符串作为盐被认为是一种最佳实践。类似于Bcrypt和Md5,如果未指定,Sha类将自动为您生成随机盐。
$sha = new Pop\Crypt\Sha(); $sha->setBits512() ->setRounds(10000); $hash = $sha->create('my-password'); // Outputs a big long hash '$6$rounds=10000$QlZOMkJZQVNBeEN...' echo $hash; if ($sha->verify('bad-password', $hash)) {} // Returns false if ($sha->verify('my-password', $hash)) {} // Returns true
使用Mcrypt进行双向加密散列
Mcrypt提供了一种创建双向加密散列的方法,您可以创建一个不可读的加密散列,然后在稍后解密以获取其值。
$mcrypt = new Pop\Crypt\Mcrypt();
您可以使用Mcrypt类设置一些参数来帮助控制散列的性能和安全性。这些值默认设置,或者您可以自己设置它们。
$mcrypt->setCipher(MCRYPT_RIJNDAEL_256) ->setMode(MCRYPT_MODE_CBC) ->setSource(MCRYPT_RAND);
与其他方法一样,最好使用强盐以提高安全性。实际上,使用强随机字符串作为盐被认为是一种最佳实践。与其他方法一样,如果未指定,Mcrypt类将自动为您生成随机盐。
$hash = $mcrypt->create('my-password'); // Outputs a big long hash 'NGGe/i6XPKFGY4cvxZrSb4zBj1J0OYh...' echo $hash; if ($mcrypt->verify('bad-password', $hash)) {} // Returns false if ($mcrypt->verify('my-password', $hash)) {} // Returns true
然后,您可以通过解密来检索散列的值。
$decrypted = $mcrypt->decrypt($hash); // Outputs 'my-password' echo $decrypted;