mmeyer2k/php-aes-gcm

dev-main 2024-08-20 21:13 UTC

This package is auto-updated.

Last update: 2024-09-20 21:17:12 UTC


README

这是一个基于 ext-sodium 的紧凑且安全可靠的 AES-256 GCM 实现方案,适用于 PHP。在不支持 AES-NI 的系统上,此库将回退到使用 ext-openssl。这两种扩展之间数据加密是兼容的。

安装

为了利用 PHP 8.2+ 中的新特性,请从主分支安装。

composer require "mmeyer2k/php-aes-gcm:dev-main"

基本用法

$key = '\+YoUr\+32\+ByTe\+BaSe64\+EnCoDeD\+kEy\+GoEs\+HeRe\+';

$msg = 'Hello World!';

$aes = new \Mmeyer2k\AesGcm\AesGcm($key);

$enc = $aes->encrypt($msg);

$dec = $aes->decrypt($enc);

echo $dec;

密钥

此库期望使用 base64 编码的 32 字节密钥。密钥应来源于安全的随机数源,以确保最高级别的保护。

在 PHP 中

echo base64_decode(random_bytes(32));

在 BaSH 中

head -c 32 /dev/urandom | base64 -w 0 | xargs echo

其他用法

附加认证数据 (AAD)

AAD 数据是额外的认证信息,但未被加密。AAD 和密文都必须存在,才能继续解密过程。

$aes = new \Mmeyer2k\AesGcm\AesGcm($key);

$aad = '...some extra information...'

$enc = $aes->encrypt($msg, $aad);

$dec = $aes->decrypt($enc, $aad);

本地密钥轮换

提供一个密钥轮换数组,如果主密钥无法解密密文,将尝试使用这些密钥。

$old = [
    'key 1',
    'key 2',
    'key 3',
];

$aes = new \Mmeyer2k\AesGcm\AesGcm($key, $old);

$dec = $aes->decrypt($ciphertext);