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}\n";
//公鑰加密
$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 "加密后:\n";
echo $encrypted."\n";

//私鑰解密
$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 "解密后:\n";
echo $decrypted."\n";

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM