devjack / encrypted-content-encoding
HTTP加密内容编码(RFC8188)
v0.3.0
2019-01-16 05:57 UTC
Requires
- php: ~5.6 || >=7.1
- ext-openssl: *
- spomky-labs/base64url: ^1.0
- spomky-labs/php-aes-gcm: ^1.2
Requires (Dev)
- phpunit/phpunit: ^5
Suggests
- paragonie/random_compat: Pollyfill for andom_bytes(). REQUIRED for PHP 5.x
This package is auto-updated.
Last update: 2024-09-16 20:54:46 UTC
README
介绍
PHP实现RFC8188,用于加密HTTP消息。
代码示例
注意:RFC8188严重依赖于base64 URL编码。
简单的回调函数用于查找加密密钥
require_once "vendor/autoload.php"; use Base64Url\Base64Url as b64; $message = "I am the walrus"; $encoded = RFC8188::rfc8188_encode( $message, // plaintext b64::decode("yqdlZ-tYemfogSmv7Ws5PQ"), // encryption key null, // key ID 123 // record size. ); $decoded = RFC8188::rfc8188_decode( $encoded, // data to decode function($keyid) { return b64::decode('yqdlZ-tYemfogSmv7Ws5PQ'); } ); $this->assertEquals($message, $decoded);
可调用的类用于查找密钥
在这个例子中,我们使用一个简单的可调用类来提供密钥查找。在复杂框架集成中这可能更有用,例如提供从数据库中查找密钥的中介。此示例不涵盖将服务注入到密钥查找类中。
use DevJack\EncryptedContentEncoding\RFC8188; use DevJack\EncryptedContentEncoding\Exception\EncryptionKeyNotFound; use Base64Url\Base64Url as b64; class MockKeyLookupProvider { protected $keys = []; public function addKey($key, $keyid='') { $this->keys[$keyid] = $key; } public function __invoke($keyid) { if (in_array($keyid, array_keys($this->keys))) { return $this->keys[$keyid]; } throw new EncryptionKeyNotFound("Encryption key not found."); } } $encoded = b64::decode("uNCkWiNYzKTnBN9ji3-qWAAAABkCYTHOG8chz_gnvgOqdGYovxyjuqRyJFjEDyoF1Fvkj6hQPdPHI51OEUKEpgz3SsLWIqS_uA"); $keyProvider = new MockKeyLookupProvider(); $keyProvider->addKey(b64::decode("BO3ZVPxUlnLORbVGMpbT1Q"), 'a1'); $decoded = RFC8188::rfc8188_decode( $encoded, // data to decode $keyProvider );
安装
通过composer可用。
composer require devjack/encrypted-content-encoding
PHP 5.6兼容性
此外,安装random_bytes的polyfill,例如
composer require paragonie/random_compat