drewlabs / crypt
提供文件加密和解密、HMAC哈希对象以及使用PHP的password_hash、password_verify和hash_equals函数进行密码哈希功能
Requires
- tuupola/base62: ^2.1
Requires (Dev)
- phpunit/phpunit: ^9.5
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-cbc
和aes-128-gcm
-> 密钥长度等于8个字符aes-256-cbc
和aes-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) // 检查哈希对象内部哈希值与纯文本值是否匹配
密码加密
该包还提供了从纯文本创建 md5
、argon2
、argon2i
和 bcrypt
哈希的实现。它内部使用 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');