popphp/pop-crypt

此包已被弃用,不再维护。未建议替代包。

Pop PHP 框架的 Pop Crypt 组件

2.1.1p1 2017-03-02 15:22 UTC

This package is auto-updated.

Last update: 2022-02-01 12:42:27 UTC


README

生命终结

pop-crypt 组件 v2.1.1 现已生命终结,将不再维护。

Build Status Coverage Status

概述

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;