3ncr / tokencrypt-php
3ncr.org V1 字符串加密标准的实现。
1.0.6
2023-04-21 11:06 UTC
Requires
- php: >=7.2.0
- ext-json: *
- ext-openssl: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3
- phpunit/phpunit: ^8.5
README
3ncr.org 是一个字符串加密/解密的规范(算法 + 存储格式)。最初它被设计用于加密配置文件中的令牌。
3ncr.org v1 使用 AES-256-GCM,相对简单。
header + base64(iv + data + tag)
加密数据看起来像这样 3ncr.org/1#pHRufQld0SajqjHx+FmLMcORfNQi1d674ziOPpG52hqW5+0zfJD91hjXsBsvULVtB017mEghGy3Ohj+GgQY5MQ
这是一个 PHP 7.2+ 的实现。
使用方法
$tokenCrypt = new \ThreeEncr\TokenCrypt($secret, $salt, 1000);
$secret
和 $salt
- 是加密密钥(技术上一个是密钥,另一个是盐,但你需要将它们都存储在某个地方,最好在不同的地方)。
你可以将它们存储在任何你喜欢的地方:环境变量、文件、共享内存、来自序列号或 MAC 的驱动器。发挥创意。
1000
- 是 PBKDF2 轮数。越多越慢。如果你确定你的秘密有 256 位的熵并且相当随机,你可以使用 '1'(实际上是 HMAC SHA3 哈希)
创建类实例后,你可以直接使用 encrypt3ncr 和 decrypt3ncr 方法(它们接受并返回字符串)
$token = '08019215-B205-4416-B2FB-132962F9952F'; // your secret you want to encrypt $encryptedSecretToken = $tokenCrypt->encrypt3ncr($token); // now $encryptedSecretToken === '3ncr.org/1#pHRufQld0SajqjHx+FmLMcORfNQi1d674ziOPpG52hqW5+0zfJD91hjXsBsvULVtB017mEghGy3Ohj+GgQY5MQ' // ... some time later in another context ... $decryptedSecretToken = $tokenCrypt->decrypt3ncr($encryptedSecretToken); // now $decryptedSecretToken === ''08019215-B205-4416-B2FB-132962F9952F';
或者你可以读取 JSON 文件并解密其值
$encConfig = json_decode(file_get_contents('config.json'), false);
$config = $token->decrypt3ncrArray($encConfig);