drewlabs/crypt

提供文件加密和解密、HMAC哈希对象以及使用PHP的password_hash、password_verify和hash_equals函数进行密码哈希功能

v0.2.5 2022-10-20 18:45 UTC

This package is auto-updated.

Last update: 2024-09-20 23:09:12 UTC


README

Crypt是一个基于PHP composer的包,提供基于PHP默认哈希和加密方法的哈希和加密类和方法。

安装

只需使用composer PHP依赖管理器安装此包。如果您的操作系统上没有安装composer,您应该能够使用此指南安装该实用程序[https://getcomposer.org.cn/download/]。

在您的操作系统中安装composer后,在您的项目根目录下终端运行以下命令

composer require drewlabs/crypt

上述命令将添加drewlabs/crypt包及其依赖项到您的项目中。

用法

加密原始字符串

use Drewlabs\Crypt\Encrypter\Crypt;

// Creates a crypt instance
$instance = Crypt::new();
$encrypted = $instance->encryptString('Raw string value');

注意 默认情况下,Crypt::new()生成一个随机密钥并使用AES-128-CBC作为加密类型。要覆盖默认值

use Drewlabs\Crypt\Encrypter\Crypt;

// Creates a crypt instance
$instance = Crypt::new('MySecret');

注意 支持的加密类型为

  • aes-128-cbcaes-128-gcm -> 密钥长度等于8个字符
  • aes-256-cbcaes-256-gcm -> 密钥长度等于16个字符

注意 如果密钥是base64字符串,加密库将在内部创建加密密钥之前尝试解码base64字符串

use Drewlabs\Crypt\Encrypter\Crypt;

// Creates a crypt instance
$instance = Crypt::new(base64_encode('MySecret'));
  • 解密字符串

要从加密字符串中获取纯文本,只需在加密文本上调用decryptString()方法。

use Drewlabs\Crypt\Encrypter\Crypt;

// Creates a crypt instance
$instance = Crypt::new();
$encrypted = $instance->encryptString('Raw string value');

// Decrypting text
$plainText = $instance->decryptString($encrypted); // Raw string value
  • 文件加密

Crypt类还提供加密整个文件并将文件从加密状态解密回原始状态的方法/函数。以下是加密和解密磁盘上文件的API

  • encryptBlob(string $from, string $to): void // 将位于路径$from的文档加密并输出加密内容到路径$to

  • decryptBlob(string $from, string $to): void // 将位于路径$from的文档解密并输出加密内容到路径$to

HMAC哈希

HMAC哈希提供创建哈希和检查原始值与哈希值的方法。要创建哈希值

use Drewlabs\Crypt\HMAC\Hash as HMACHash;

$instance = HMACHash::new();
$hash = $instance->make('My Hashable Value');

注意 默认情况下,哈希值是从字符串创建的。但Hmac实现支持PHP数组,以及可序列化的对象(具有toArray()方法的类)。如果对象没有toArray()方法,哈希实现将在哈希之前使用get_object_vars在对象上调用,以将对象转换为数组。

注意 使用Hash::raw()方法从现有的原始哈希字符串创建哈希对象

use Drewlabs\Crypt\HMAC\Hash as HMACHash;

$instance = HMACHash::raw("...."); // Creates a hash instance from a raw sstring composed
  • 检查哈希值

要检查哈希值与新明文值,首先从原始哈希值创建哈希对象,然后对纯文本调用check()方法。

use Drewlabs\Crypt\HMAC\Hash as HMACHash;

$hash = HMACHash::new('md5');
// Returns a boolean indicating whether hashed value and plain text matches.
$boolean = $hash::raw("Hashed value")->check('Hello World!');

注意 默认情况下,库在创建哈希值时使用sha256算法。PHP基本函数hash_algos返回支持的哈希算法列表。

注意 以下是哈希值的API

  • make(?string $alg, ?string $key = null): // 使用用户提供的算法创建哈希值
  • hashOptions(): // 返回一个由哈希密钥和用于哈希值的算法组成的编码字符串
  • static raw(string $hash, ?string $options = null) // 用于从原始哈希值创建哈希对象的静态方法
  • check(string $value) // 检查哈希对象内部哈希值与纯文本值是否匹配

密码加密

该包还提供了从纯文本创建 md5argon2argon2ibcrypt 哈希的实现。它内部使用 PHP 的 password_hash 函数来创建哈希。它们推荐用于用户应用程序的密码哈希。要从纯文本创建密码哈希

  • 哈希管理器工厂
use Drewlabs\Crypt\Passwords\Factory;

// Creates a hash manager from using argon2i password hasing
$hash = Factory::new()->make(\PASSWORD_ARGON2I)
                ->resolve()
                ->make('SuperSecret');
  • 代理函数 API
use function Drewlabs\Crypt\Proxy\usePasswordManager;

// Creates a hash manager from using bcrypt password hasing
$hash = usePasswordManager('bcrypt')->make('SuperSecret');