You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:37:09