php实现jwt中的rs256加密代码
时间: 2023-10-14 14:04:13 浏览: 254
以下是使用 PHP 实现 JWT 中 RS256 算法的示例代码:
```php
<?php
// 生成 JWT Token
function generateToken($payload, $privateKey) {
$header = array('alg' => 'RS256', 'typ' => 'JWT');
$jwt = base64_encode(json_encode($header)) . '.' . base64_encode(json_encode($payload));
openssl_sign($jwt, $signature, $privateKey, 'SHA256');
$jwt .= '.' . base64_encode($signature);
return $jwt;
}
// 验证 JWT Token
function verifyToken($jwt, $publicKey) {
list($headerEncoded, $payloadEncoded, $signatureEncoded) = explode('.', $jwt);
$header = json_decode(base64_decode($headerEncoded), true);
$payload = json_decode(base64_decode($payloadEncoded), true);
$signature = base64_decode($signatureEncoded);
$jwt = $headerEncoded . '.' . $payloadEncoded;
$isVerified = openssl_verify($jwt, $signature, $publicKey, 'SHA256');
return $isVerified ? $payload : null;
}
// 加载密钥
$privateKey = openssl_pkey_get_private(file_get_contents('private.key'));
$publicKey = openssl_pkey_get_public(file_get_contents('public.key'));
// 生成 Token
$payload = array('sub' => '1234567890', 'name' => 'John Doe', 'iat' => 1516239022);
$jwt = generateToken($payload, $privateKey);
echo $jwt . "\n";
// 验证 Token
$verifiedPayload = verifyToken($jwt, $publicKey);
var_dump($verifiedPayload);
?>
```
在以上代码中,`generateToken` 函数用于生成 JWT Token,其中 `$payload` 参数是包含用户信息的数组,`$privateKey` 是使用 `openssl_pkey_get_private` 加载的私钥。`verifyToken` 函数用于验证 JWT Token,其中 `$jwt` 参数是要验证的 Token 字符串,`$publicKey` 是使用 `openssl_pkey_get_public` 加载的公钥。在示例代码中,私钥和公钥保存在文件 `private.key` 和 `public.key` 中。
阅读全文