大米CMS官网论坛,大米站长联盟,大米站长之家,大米开发者社区

 找回密码
 注册大米会员

QQ登录

只需一步,快速开始

查看: 7885|回复: 0

jwe使用实例

[复制链接]

493

主题

770

帖子

7596

积分

超级版主

Rank: 8Rank: 8

积分
7596

商城钻石VIP授权用户

发表于 2018-12-27 15:27:55 | 显示全部楼层 |阅读模式
jwe的 git: https://github.com/Spomky-Labs/jose
  1. <?php
  2. namespace Jose;

  3. use Jose\Factory\JWSFactory;
  4. use Jose\Factory\JWEFactory;
  5. use Jose\Factory\JWKFactory;
  6. use Jose\Loader;

  7. class fpspay
  8. {
  9.     protected $_kid;
  10.     private $_public_key;
  11.     private $_private_key;

  12.     public function __construct($kid)
  13.     {
  14.         $this->_kid = $kid;
  15.         $jk = new JWKFactory();
  16.         $this->_private_key = $jk->createFromKeyFile(
  17.             __DIR__.'/cert/rsa_private_key.pem',
  18.             null,
  19.             array(
  20.                 'kid' => $kid,
  21.                 'use' => 'enc',
  22.                 'alg' => 'RSA-OAEP-256'
  23.             )
  24.         );
  25.         $this->_public_key = $jk->createFromKeyFile(
  26.             __DIR__.'/cert/rsa_public_key.pem',
  27.             null,
  28.             array(
  29.                 'kid' => $kid,
  30.                 'use' => 'enc',
  31.                 'alg' => 'RSA-OAEP-256'
  32.             )
  33.         );
  34.     }

  35.     public function rsa_encode($message)
  36.     {
  37.         $data = \GuzzleHttp\json_encode($message);
  38. //头签名
  39.         $signature_header = array(
  40.             'alg' => 'RSA-OAEP-256',
  41.             'enc' => 'A256CBC-HS512',
  42.             'zip' => 'DEF',
  43.         );
  44.         $jws = JWSFactory::createJWS($data, true);
  45.         $jws = $jws->addSignatureInformation($this->_private_key, $signature_header);
  46.         $jws_str = serialize($jws);
  47. //加密内容
  48.         $encode_header = [
  49.             'alg' => 'RSA-OAEP-256',//加密类型
  50.             'enc' => 'A128GCM',//加密方法
  51.             'zip' => 'DEF',
  52.         ];
  53.         $jwe = JWEFactory::createJWEToCompactJSON(
  54.             $jws_str,
  55.             $this->_public_key,
  56.             $encode_header
  57.         );
  58.         return $jwe;
  59.     }

  60.     public function rsa_decode($message)
  61.     {
  62.         $loader = new Loader();
  63.         $jwe = $loader->loadAndDecryptUsingKey(
  64.             $message,
  65.             $this->_private_key, // 秘钥 按照文档,这里使用dir
  66.             ['RSA-OAEP-256'], // 秘钥加密算法 alg
  67.             ['A128GCM'], // 内容加密算法 enc
  68.             $result
  69.         );
  70.         $jwe_obj = unserialize($jwe->getPayload());
  71. //验证签名
  72.         $sign = $jwe_obj->getSignatures();
  73.         if($sign){
  74.             $first_sign = $sign[0];
  75.             $sign_key = $first_sign->getSignatureKey();
  76.             //签名验证通过就返回内容
  77.             if($this->_kid && $sign_key->get('kid') == $this->_kid){
  78.                 $result = $jwe_obj->getPayload();
  79.                 return $result;
  80.             }
  81.         }
  82.         return false;
  83.     }
  84. }
复制代码

demo.php :

  1. <?php
  2. $loader = require __DIR__.'/../vendor/autoload.php';
  3. $loader->add('Jose', __DIR__);
  4. use Jose\fpspay;
  5. $message = Array(
  6.     "uname"=>"shaobaoer","upwd"=>"123456"
  7. );
  8. $kid = '0002';
  9. $fpspay = new fpspay($kid);
  10. $jwe_str = $fpspay->rsa_encode($message);
  11. echo $jwe_str;
  12. $jw = $fpspay->rsa_decode($jwe_str);
  13. var_dump(json_decode($jw,true));
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册大米会员

本版积分规则

QQ|小黑屋|大米CMS社区 ( 蜀ICP备11002200号-2广告联系:广告联系 

Powered by 大米CMS

© 2010-2020 大米CMS Inc.

快速回复 返回顶部 返回列表