miranj / craft-cryptographer
添加Twig过滤器以执行加密操作。
Requires
- php: ^7.2.5 || ^8.0
- craftcms/cms: ^3.0 || ^4.0 || ^5.0
- hashids/hashids: ^2.0 || ^3.0 || ^4.0 || ^5.0
Requires (Dev)
- craftcms/phpstan: dev-main
- craftcms/rector: dev-main
README
密码学
Craft CMS 插件,它添加了 Twig 过滤器,通过URL安全的字符串进行加密和解密内容。适用于以下情况:
- 生成一次性URL,例如用于私有页面
- 将数字ID如521转换为字符串,例如在
youtube.com/watch?v=dQw4w9WgXcQ
- 生成用户或条目的URL,而不暴露他们的用户名、别名或ID
内容
使用方法
Cryptographer提供了两种将数据转换为密文,以及从密文转换回原始数据的方法。一种方法是加密安全的,基于Craft的安全组件(该组件反过来基于Yii的)。另一种方法是不安全的,基于流行的Hashids库。两种方法都产生URL安全的字符串。
安全加密
使用此方法加密敏感信息。它与本地的encenc
过滤器不同,输出始终是URL安全的字符串。请注意,每次生成的密文都将不同。因此,这适用于生成一次性令牌,但不是生成永久URL的好选择。
模板
{{ 'Sensitive data' | encrypt }} {{ 'Y3J5cHQ64Q8YoiXmSUYq6c2mcg6YjmVjNTBkNGViNmE4M2FiNTVmYTdkZTUyYjJhZmNjNzY5NWRiNDc5M2ExNzRhZTE1ZWZmMjU2NzFkMDNhMzEyZWIX9Rj4f4vOKB2XCljjXha3aKfJw4c6D-T7zMoXhKpeFw==' | decrypt }}
API
$ciphertext = \miranj\cryptographer\Plugin::getInstance()->cryptographer->encrypt('Sensitive data'); $originaltext = \miranj\cryptographer\Plugin::getInstance()->cryptographer->decrypt($ciphertext);
数字掩码
重要:此方法不应被视为加密安全的。避免用于编码敏感数据,如密码。
此方法将数字如457转换为字符串如'qan8deK8'
。使用此方法对元素ID(或ID列表)进行掩码,以便在URL中使用。它是流行的Hashids库的包装器。
模板
{{ user.id | maskNumbers }} {{ 'qan8deK8' | unmaskNumbers }}
API
$mask = \miranj\cryptographer\Plugin::getInstance()->cryptographer->maskNumbers([521]); $numbers = \miranj\cryptographer\Plugin::getInstance()->cryptographer->unmaskNumbers('qan8deK8');
旧方法
重要:此方法不应被视为加密安全的。避免用于编码敏感数据,如密码。
Cryptographer提供了一种第三种掩码和解码字符串的方法,该方法在v1.x版本中已弃用。它仅提供与使用Craft 2版本此插件(v0.x)的网站向后兼容,并且需要将内容转换回原始格式。
maskLegacy
{{ 'Do not use for sensitive data' | maskLegacy }} {{ 'Do not use for sensitive data' | maskLegacy | url_encode }} {{ 'Do not use for sensitive data' | maskLegacy('AES-128-CFB') }}
此过滤器接受两个可选参数。
$method
— 要使用的加密方法。可能的方法可以通过openssl_get_cipher_methods()
确定。默认使用AES-256-CBC
方法。$iv
— 初始化向量。如果没有提供初始化向量,则每次都使用随机值。
unmaskLegacy
{{ '66e46cfa6029c1484jTssikEhQXOk4BvYXWfu1M82R3Ifh1kVxQYmxoGwKc=' | unmaskLegacy }} {{ '9b3c72940c8318b7dGbekO6uMVIAxk7UFA1f0A5tTuoqBo1Vn0jRb3ZjN54=' | unmaskLegacy('AES-128-CBC') }}
此过滤器接受一个可选参数。
$method
— 要使用的加密方法。可能的方法可以通过openssl_get_cipher_methods()
确定。默认使用AES-256-CBC
方法。
配置
要配置Cryptographer,在您的config/
文件夹中创建一个cryptographer.php
文件,该文件返回一个数组。此文件支持Craft的标准多环境配置。
以下是一个示例配置文件,以及所有可能的设置及其默认值列表。
<?php return [ // hashids 'hashidsMinLength' => 15, // pad output to fit at least a certain length 'hashidsAlphabet' => null, // use a custom alphabet, eg: 'abcdefghijklmnopqrstuvwxyz' // legacy 'secret' => null, // defaults to using Craft's securityKey ];
-
hashidsMinLength
– 配置Hashids以确保输出字符串达到特定长度。生成的字符串可能不会正好是这个长度,但不会短于此数。 -
hashidsAlphabet
– 使用自定义字母表生成输出字符串。Hashids默认使用的字母表为'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
。 -
secret
– 一个私有的、加密安全的密钥,用于加密和解密数据。默认值为null
,在这种情况下,插件将使用Craft的通用配置中的securityKey
。此设置仅保留作历史原因,即如果您正在迁移Craft 2网站。只有在您需要解密此插件Craft 2版本的密文时才应显式设置。在从Craft 2迁移之前,请从设置 > 插件 > Cryptographer > Secret复制值。
安装
您可以从插件商店或使用Composer安装此插件。
从插件商店
转到项目控制面板中的插件商店,搜索“Cryptographer”。然后在弹出的窗口中点击“安装”按钮。
使用Composer
打开终端并运行以下命令
# go to the project directory
cd /path/to/project
# tell composer to use the plugin
composer require miranj/craft-cryptographer
# tell Craft to install the plugin
./craft plugin/install cryptographer
要求
此插件需要Craft CMS 3、4或5。Craft 2版本可在v0
分支中找到。
由Miranj提供