PHP中使用A256GCMKW与A256GCM解密JWE令牌失败求助
PHP中使用A256GCMKW与A256GCM解密JWE令牌
需求与相关信息
需使用算法A256GCMKW和编码A256GCM解密JWE令牌,相关信息如下:
JWE令牌
eyJlbmMiOiJBMjU2R0NNIiwidGFnIjoiY2QtQk5BTVI0VkdzRk1RMndvNXB6dyIsImFsZyI6IkEyNTZHQ01LVyIsIml2IjoiZjY0R05sR01aMVpKY3kxWSJ9.Z1ps3c2qJ_CuNU4XcT-qQsT0vBIGTwM36ps5NntBrug.3g5dmQhc9ZGHXWQr.7U1ORK-pzz6eNuU5ZG8AdaNNynlTo4cr4xCV3ZAAzXF3Ta9424OIf0LmMr0DITrtuSV0o0LADHY160ePLAbPCWAD.NzGJvxa7xlZyWPORCJ3GwQ
密钥信息
- 十六进制:
776F65257B2E3138323E3E27582D46444A4C527A5F626B6C05672B122B373B31 - Base64编码:
d29lJXsuMTgyPj4nWC1GREpMUnpfYmtsBWcrEis3OzE=
问题与测试代码
能否在PHP中完成该解密操作?我尝试了相关示例代码,该代码对示例数据有效,但使用我的令牌和密钥时无法正常运行,测试代码如下:
<?php // base64url_decode from: https://www.php.net/manual/de/function.base64-encode.php#121767 function base64url_decode( $data ){ return base64_decode(strtr( $data, '-_', '+/') . str_repeat('=', 3 - ( 3 + strlen( $data )) % 4 )); } $textToDecrypt = "eyJhbGciOiJBMjU2R0NNS1ciLCJpdiI6IjFrQ1dpTXZKdFNIX3c1ZEwiLCJ0YWciOiJjT3k2TVhTenhaT3lCYi1WdXBfY1lnIiwiZW5jIjoiQTI1NkdDTSIsInR5cCI6IkpPU0UiLCJraWQiOiJmMGYwYjZmNi05NzJlLWQzMzgtNTZhNS0xZmZiY2NjNzcwMDEiLCJjaGFubmVsU2VjdXJpdHlDb250ZXh0IjoiU0hBUkVEX1NFQ1JFVCIsImlhdCI6IjE1ODc1Nzg4OTkifQ.O0y-pu5knc9IUAfAENoMwT_3LwW-oZzzItVxQD8UhHk.uFmZHB7BU9JlKRWC.7ZoJ0oTI8MWXIr4GtzziTw.6qdmvDbnZdi6zf34nhcnoQ"; //$textToDecrypt = "eyJlbmMiOiJBMjU2R0NNIiwidGFnIjoiY2QtQk5BTVI0VkdzRk1RMndvNXB6dyIsImFsZyI6IkEyNTZHQ01LVyIsIml2IjoiZjY0R05sR01aMVpKY3kxWSJ9.Z1ps3c2qJ_CuNU4XcT-qQsT0vBIGTwM36ps5NntBrug.3g5dmQhc9ZGHXWQr.7U1ORK-pzz6eNuU5ZG8AdaNNynlTo4cr4xCV3ZAAzXF3Ta9424OIf0LmMr0DITrtuSV0o0LADHY160ePLAbPCWAD.NzGJvxa7xlZyWPORCJ3GwQ"; $parts = explode(".",$textToDecrypt); // Header, IV, tag $headerB64 = $parts[0]; $header = base64url_decode($headerB64); $headerJSON = json_decode($header); $ivKW = base64url_decode($headerJSON->iv); $tagKW = base64url_decode($headerJSON->tag); // Ciphertext $ciphertextKW = base64url_decode($parts[1]); // Key derivation via password (as already supplied in the posted code) $password = "-1FwMVo7r{}B17iqly51zM3zvOAh0/r9636-NOXS"; //$password = "d29lJXsuMTgyPj4nWC1GREpMUnpfYmtsBWcrEis3OzE="; $keyKW = substr(hash('sha256', $password, true), 0, 32); // Decrypt key $decryptedKey = openssl_decrypt($ciphertextKW, "aes-256-gcm", $keyKW, OPENSSL_RAW_DATA, $ivKW, $tagKW); print("Decrypted key (hex): " . bin2hex($decryptedKey) . "\n"); // IV, ciphertext, tag $ivCT = base64url_decode($parts[2]); $ciphertextCT = base64url_decode($parts[3]); $tagCT = base64url_decode($parts[4]); // Decrypt ciphertext $decryptedText = openssl_decrypt($ciphertextCT, "aes-256-gcm", $decryptedKey, OPENSSL_RAW_DATA, $ivCT, $tagCT, $headerB64); print("Decrypted ciphertext: " . $decryptedText . "\n"); ?>
内容的提问来源于stack exchange,提问作者Carlos Damelio
相关产品推荐
相关产品推荐

