我正在尝试在PHP中构建一个与JWT相似的自定义令牌系统。这个想法是要编码和加密一些用户数据,然后将其作为令牌发送给客户端。这是我到目前为止所做的简单示例:

问题描述 投票:0回答:1
您的方法基本上对应于centrypt-then-mac

方案。

,但是,您不应将密钥用作IV,而应为每个加密使用随机IV。 IV不是秘密,通常与密文(iv | ciphertext | Mac)串联(并且也将被大会)。
思想上,应应用不同的密钥进行加密和身份验证(请参见
HERE

)。

php encryption jwt openssl decode
1个回答
0
投票
jwe

。 JWE生成了一个令牌,该令牌(紧凑序列化)由5个部分组成,这些部分由点:标头(带有有关算法的信息),加密键,IV,Ciphertext和身份验证标签。 由于不应在您的情况下加密密钥,因此要应用direct

jwe

。在这种情况下,第二部分是一个空字符串。 JWE有各种库,例如

jwt-framework

。直接JWE的示例实现(具有AES-256和GCM): <?php require __DIR__ . '/vendor/autoload.php'; use Jose\Component\Core\AlgorithmManager; use Jose\Component\Encryption\Algorithm\KeyEncryption\Dir; use Jose\Component\Encryption\Algorithm\ContentEncryption\A256GCM; use Jose\Component\Core\JWK; use Jose\Component\Encryption\Serializer\CompactSerializer; use Jose\Component\Encryption\JWEBuilder; use Jose\Component\Encryption\JWEDecrypter; $keyEncryptionAlgorithmManager = new AlgorithmManager([ new Dir(), ]); $contentEncryptionAlgorithmManager = new AlgorithmManager([ new A256GCM(), ]); $jwk = new JWK([ 'kty' => 'oct', 'k' => 'MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDE', ]); $serializer = new CompactSerializer(); // Encryption $jweBuilder = new JWEBuilder( $keyEncryptionAlgorithmManager, $contentEncryptionAlgorithmManager ); $payload = "some payload"; $jwe = $jweBuilder ->create() ->withPayload($payload) ->withSharedProtectedHeader([ 'alg' => 'dir', 'enc' => 'A256GCM' ]) ->addRecipient($jwk) ->build(); $token = $serializer->serialize($jwe, 0); print("Token: " . $token . PHP_EOL); // Decryption $jweDecrypter = new JWEDecrypter( $keyEncryptionAlgorithmManager, $contentEncryptionAlgorithmManager ); $jwe = $serializer->unserialize($token); $jweDecrypter->decryptUsingKey($jwe, $jwk, 0); $payload = $jwe->getPayload(); print("Payload: " . $payload . PHP_EOL); ?>


样本输出:

Token: eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..RVoWvebzuMIpcuTq.VfLcctgHZthdvHda.JjGEESVSAcbZxo6IgdK_qw Payload: some payload jwe非常强大,支持许多算法,例如除了上面使用的A256GCM外,还使用A128CBC-HS256,它基本上对应于您使用的算法(请参阅
HERE)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.