jsq/doctrine-cache-encrypter

Doctrine\Common\Cache\Cache 实例的加密装饰器

0.4.0 2016-02-22 02:52 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:23 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Apache 2 License Total Downloads Author

在静态数据加密方面,不应阻止您使用您熟悉和喜爱的开源工具。如果您有需要比其他缓存更高安全级别的数据,您可以通过 EncryptingDecorator 存储和访问它。

注意事项

加密和解密都是昂贵的操作,频繁地从加密数据存储中读取可能会迅速成为性能良好的应用程序中的瓶颈。请谨慎使用加密缓存(例如,不要 在您的 Doctrine 注释缓存周围使用加密装饰器)。

使用方法

此包提供两种缓存装饰器,一种使用密码短语加密数据,另一种使用公钥和私钥进行加密。使用密码短语的实现性能更高,但需要您安全地部署纯文本密码。

首先,像平常一样创建您的基于 Doctrine 的缓存

$cache = new \Doctrine\Common\Cache\RedisCache($redisClient);

其次,使用加密装饰器包裹您的缓存

$encryptedCache = new \Jsq\Cache\PasswordEncryption\Decorator(
    $cache,
    $password,
    $cipher // optional, defaults to 'aes-256-cbc'
);

然后像平常一样使用您的 $cache$encryptedCache

$cache->save('normal_cache_data', 'Totally normal!');

$encryptedCache->save('api_keys', $keys);

尽管您的常规缓存和加密缓存共享一个存储层和密钥空间,但它们将无法读取彼此的数据。如果 $encryptedCache 被要求读取未加密的数据,它将返回 false,如果常规的 $cache 被要求读取加密数据,它将返回乱码。

在不共享秘密的情况下加密缓存

如果您不想依赖共享密码,则 EnvelopeEncryption\Decorator 可以使用公私钥对来保护您的敏感缓存条目。

$encryptedCache = new \Jsq\Cache\EnvelopeEncryption\Decorator(
    $cache,
    'file:///path/to/certificate.pem',
    'file:///path/to/private/key.pem',
    $passphrase_for_private_key_file, // optional, defaults to null
    $cipher // optional, defaults to 'aes-256-cbc'
);

证书可以是有效的 x509 证书,PEM 编码的证书文件路径(路径必须以 file:// 开头),或 PEM 编码的证书字符串。私钥可以是 PEM 编码的私钥文件路径(路径必须以 file:// 开头),或 PEM 编码的私钥字符串。