firebase/php-jwt使用openssl实现 RSA非对称加密

最近在使用PHP 中 firebase/php-jwt ,需要选择加密算法,选择了RSA算法,需要使用openssl来生成密钥。把生成方式使用记录下来。

简单定义:公钥和私钥,加密和解密使用的是两个不同的密钥,所以是非对称

系统:ubuntu 18.04

软件:openssl java php

生成公钥私钥

使用命令生成私钥:

openssl genrsa -out rsa_private_key.pem 1024

  

参数:genrsa 生成密钥   -out 输出到文件  rsa_private_key.pem 文件名  1024 长度

从私钥中提取公钥:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

参数: rsa 提取公钥  -in 从文件中读入  rsa_private_key.pem 文件名   -pubout  输出   -out 到文件  rsa_public_key.pem  文件名

使用openssl加解密:

新建一个readme.txt 内容是taoshihan

使用公钥加密:

openssl rsautl -encrypt -in readme.txt -inkey rsa_public_key.pem -pubin -out hello.en

  

参数: rsautl 加解密  -encrypt 加密  -in 从文件输入  readme.txt 文件名  -inkey  输入的密钥  rsa_public_key.pem  上一步生成的公钥  -pubin 表名输入是公钥文件  -out输出到文件  hello.en 输出文件名

使用私钥解密:

openssl rsautl -decrypt -in hello.en -inkey rsa_private_key.pem -out hello.de

参数: -decrypt 解密  -in 从文件输入 hello.en 上一步生成的加密文件  -inkey 输入的密钥 rsa_private_key.pem 上一步生成的私钥  -out输出到文件  hello.de 输出的文件名

php加解密:

$profile="taoshihan";
echo "加密前:{$profile}
";
//公钥加密
$public_key=file_get_contents("rsa_public_key.pem");
$pub_key = openssl_pkey_get_public($public_key); 
openssl_public_encrypt($profile,$encrypted,$pub_key);
$encrypted=base64_encode($encrypted);//因为加密后是乱码,所以base64一下
echo "加密后:
";
echo $encrypted."
";

//私钥解密
$private_key=file_get_contents("rsa_private_key.pem");
$pi_key =  openssl_pkey_get_private($private_key); 
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);
echo "解密后:
";
echo $decrypted."
";

firebase/php-jwt生成JWT:

生成:

$jwt=JWT::encode($token,self::$privateKey,'RS256');

解密:

$token=JWT::decode($jwt,self::$publickKey, ['RS256']);

参数:$privateKey为私钥;publickKey为公钥

来源:https://www.cnblogs.com/hnhycnlc888/archive/2018/08/28/9551778.html

php-jwt::https://github.com/firebase/php-jwt

关于JWT:JSON Web Token 入门教程

https://github.com/firebase/php-jwt

原文地址:https://www.cnblogs.com/fogwang/p/13446889.html