3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * A human-usable variant of openssl_seal() * * @param string $plaintext Your message * @param string $publickey_string PEM-encoded RSA public key * @param boolean $encode Hex-encode the output? * * @return string */ function easy_seal($plaintext, $publickey_string, $encode = false) { $pubkey = openssl_get_publickey($publickey_string); if ($pubkey === false) { throw new Exception('Could not load public key'); } $sealed = ''; $ekeys = []; $result = openssl_seal($plaintext, $sealed, $ekeys, [$pubkey]); if ($result === false) { throw new Exception('openssl_seal failed!'); } if ($encode) { return json_encode([ bin2hex($sealed), bin2hex($ekeys[0]) ]); } return json_encode([$sealed, $ekeys[0]]); } /** * Inverse operation of easy_seal() * * @param string $ciphertext (the output of easy_seal()) * @param string $privatekey_string PEM-encoded RSA private key * @param boolean $encoded Do we need to decode from hex? * * @return string */ function easy_unseal($ciphertext, $privatekey_string, $encoded = false) { list($sealed, $ekey) = json_decode($ciphertext, true); if ($encoded) { $sealed = hex2bin($sealed); $ekey = hex2bin($ekey); } $open_data = ''; $privkey = openssl_get_privatekey($privatekey_string); if ($privkey === false) { throw new Exception('Could not load public key'); } $result = openssl_open($sealed, $open_data, $ekey, $privkey); if ($result === false) { throw new Exception('openssl_open failed!'); } return $open_data; } $private_key_pem = "-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAtCY43TsWfw+Ep8FiU0Z/DiivoyHAFzckFttOgBh9wZMI+zYy XAmvmbpFh6EsfAn1zcZAJNIjb7jXt9ySD8/gTHSvVRhawysSk+jvG7bVNy+JmEcb B0bIFLUVud1sZWJANv999iub1Rpzb6xIhZ5ZsEDMob4UWxouKPfrRQcYlrI3X7d/ VLfmnU/sSzpS6eHn+f064zXXmf1tVIBwEKkq/eaxgJyW8AM8XL5qL9RueHhihQm/ G71cMVc5XXgoVy8+egx/aQm2u26d9ez1Vu804ptJoLAnjTdx1an5CKFikpvt2OYP ZVFuWV6cqMMCksqzBSZKMu7wtaiEc/UN41UHcQIDAQABAoIBAGxiyregA0rzBTcB DK1ZrrvQEswtVCsji90MmVBMa+z5D+BEnUvur+3nukl92QvP2kmxy4nbvGJNbcw7 Ms28nhCh65NhEcp2sbi33pRoDiQjv78UmNhp55s90BKBe+QLluMAGMLxPdKbFXTM zN1HhmKaugNeH1UojTks4CopuMuA7wr31McD8AjNZWdg2w4zDbnSy0UuLH90Bq6i tpRtVZmeD6Y7KmJOzt7/vNPbp9BabLUQarCy2Pg16Zr3GG0g0Q7AIjoF2yqHfebI nJs6bjEiUPL8MGU41iwbVoFWJm1T9NZcfydd26vkUPOXnuGorLTsyJ7nQCKSKv12 mfenp4ECgYEA5PCiN5T/CC11BTerLiQl1QPopGt1XOvg/5DaFi/B4/QmZ7ZND27r fwiZBCAF0B6N5alJfmZHbraO0LcxM8EWB29f9y+t6rttIaKQlsLBkfe64RpNpRKX viTf5TWuI8HgZBs20IzqPow4DeoaH7a2PxqfMa36IfSasO097pkLIAkCgYEAyXFC Sb48uaHt2LJqmdaxQg1im5WEZkh19a/0l02nVshi+4cOTS3MiRqoSfpM/baaAzfI GOpaCbcXtah3k0m5tXeBvXYxZJxUEVO/PdGQlg1ZO8h1UOfsgyjM3YDUG9mcofFo hOaGM4RHVt7pLAj42B/PAoZVYjNLXX6g1/YzNikCgYEAu8AkKJUGebxdxYOb3OFE LWdhOMXvn97JzI0MbTmJNtqZTGCS3d9HPgzdACcK3VzRXdDxNrnGRyNsB/rUXO8y k7Jg7ySo6mH+46CgFyNs/7o8BjM+DewriYJQI3dccnKjBTXURD/sMpNnvPGJrwx2 dVXtzB4zjfk9i29kZPIZz5ECgYEAwNeXAOeIVKFrA57RpFI+QSB1PMJnDE/j9P6s JUhmoRKWh3pkO4hTnRES+DcRC3WKfPgiq492AITxwqrzReI3UTyFzG1gnZN2e1vz 4WdEhhFjUnL1tC1CYtFlRct1wu+RHgrv5wKUiK7iaIxfJhO0vZm94AnfpXG7fVai /fuoTPkCgYEA0pxWFSyEOeQt1LV3rTZGxK6QAt5h36JYWt8/ck2YrMeZn2wAv+hy ZgtWsdrJLvEVId3wH79vCQtAjZJAyCVxAhXPlAhxmA8F3LOqEgwrnls52SmWw/5T sVlqPCXEO3fNZLOd5sYYmiaQjWbP4dAP5WQU75UhYAnyz6Myz3rbN58= -----END RSA PRIVATE KEY-----"; $public_key_pem = "-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtCY43TsWfw+Ep8FiU0Z/ DiivoyHAFzckFttOgBh9wZMI+zYyXAmvmbpFh6EsfAn1zcZAJNIjb7jXt9ySD8/g THSvVRhawysSk+jvG7bVNy+JmEcbB0bIFLUVud1sZWJANv999iub1Rpzb6xIhZ5Z sEDMob4UWxouKPfrRQcYlrI3X7d/VLfmnU/sSzpS6eHn+f064zXXmf1tVIBwEKkq /eaxgJyW8AM8XL5qL9RueHhihQm/G71cMVc5XXgoVy8+egx/aQm2u26d9ez1Vu80 4ptJoLAnjTdx1an5CKFikpvt2OYPZVFuWV6cqMMCksqzBSZKMu7wtaiEc/UN41UH cQIDAQAB -----END PUBLIC KEY-----"; $plaintext = 'Something something dark side'; $store_me = easy_seal($plaintext, $public_key_pem, true); var_dump($store_me); $visible = easy_unseal($store_me, $private_key_pem, true); var_dump($visible);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/BNavp
function name:  (null)
number of ops:  22
compiled vars:  !0 = $private_key_pem, !1 = $public_key_pem, !2 = $plaintext, !3 = $store_me, !4 = $visible
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   61     0  E >   ASSIGN                                                   !0, '-----BEGIN+RSA+PRIVATE+KEY-----%0AMIIEpQIBAAKCAQEAtCY43TsWfw%2BEp8FiU0Z%2FDiivoyHAFzckFttOgBh9wZMI%2BzYy%0AXAmvmbpFh6EsfAn1zcZAJNIjb7jXt9ySD8%2FgTHSvVRhawysSk%2BjvG7bVNy%2BJmEcb%0AB0bIFLUVud1sZWJANv999iub1Rpzb6xIhZ5ZsEDMob4UWxouKPfrRQcYlrI3X7d%2F%0AVLfmnU%2FsSzpS6eHn%2Bf064zXXmf1tVIBwEKkq%2FeaxgJyW8AM8XL5qL9RueHhihQm%2F%0AG71cMVc5XXgoVy8%2Begx%2FaQm2u26d9ez1Vu804ptJoLAnjTdx1an5CKFikpvt2OYP%0AZVFuWV6cqMMCksqzBSZKMu7wtaiEc%2FUN41UHcQIDAQABAoIBAGxiyregA0rzBTcB%0ADK1ZrrvQEswtVCsji90MmVBMa%2Bz5D%2BBEnUvur%2B3nukl92QvP2kmxy4nbvGJNbcw7%0AMs28nhCh65NhEcp2sbi33pRoDiQjv78UmNhp55s90BKBe%2BQLluMAGMLxPdKbFXTM%0AzN1HhmKaugNeH1UojTks4CopuMuA7wr31McD8AjNZWdg2w4zDbnSy0UuLH90Bq6i%0AtpRtVZmeD6Y7KmJOzt7%2FvNPbp9BabLUQarCy2Pg16Zr3GG0g0Q7AIjoF2yqHfebI%0AnJs6bjEiUPL8MGU41iwbVoFWJm1T9NZcfydd26vkUPOXnuGorLTsyJ7nQCKSKv12%0Amfenp4ECgYEA5PCiN5T%2FCC11BTerLiQl1QPopGt1XOvg%2F5DaFi%2FB4%2FQmZ7ZND27r%0AfwiZBCAF0B6N5alJfmZHbraO0LcxM8EWB29f9y%2Bt6rttIaKQlsLBkfe64RpNpRKX%0AviTf5TWuI8HgZBs20IzqPow4DeoaH7a2PxqfMa36IfSasO097pkLIAkCgYEAyXFC%0ASb48uaHt2LJqmdaxQg1im5WEZkh19a%2F0l02nVshi%2B4cOTS3MiRqoSfpM%2FbaaAzfI%0AGOpaCbcXtah3k0m5tXeBvXYxZJxUEVO%2FPdGQlg1ZO8h1UOfsgyjM3YDUG9mcofFo%0AhOaGM4RHVt7pLAj42B%2FPAoZVYjNLXX6g1%2FYzNikCgYEAu8AkKJUGebxdxYOb3OFE%0ALWdhOMXvn97JzI0MbTmJNtqZTGCS3d9HPgzdACcK3VzRXdDxNrnGRyNsB%2FrUXO8y%0Ak7Jg7ySo6mH%2B46CgFyNs%2F7o8BjM%2BDewriYJQI3dccnKjBTXURD%2FsMpNnvPGJrwx2%0AdVXtzB4zjfk9i29kZPIZz5ECgYEAwNeXAOeIVKFrA57RpFI%2BQSB1PMJnDE%2Fj9P6s%0AJUhmoRKWh3pkO4hTnRES%2BDcRC3WKfPgiq492AITxwqrzReI3UTyFzG1gnZN2e1vz%0A4WdEhhFjUnL1tC1CYtFlRct1wu%2BRHgrv5wKUiK7iaIxfJhO0vZm94AnfpXG7fVai%0A%2FfuoTPkCgYEA0pxWFSyEOeQt1LV3rTZGxK6QAt5h36JYWt8%2Fck2YrMeZn2wAv%2Bhy%0AZgtWsdrJLvEVId3wH79vCQtAjZJAyCVxAhXPlAhxmA8F3LOqEgwrnls52SmWw%2F5T%0AsVlqPCXEO3fNZLOd5sYYmiaQjWbP4dAP5WQU75UhYAnyz6Myz3rbN58%3D%0A-----END+RSA+PRIVATE+KEY-----'
   89     1        ASSIGN                                                   !1, '-----BEGIN+PUBLIC+KEY-----%0AMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtCY43TsWfw%2BEp8FiU0Z%2F%0ADiivoyHAFzckFttOgBh9wZMI%2BzYyXAmvmbpFh6EsfAn1zcZAJNIjb7jXt9ySD8%2Fg%0ATHSvVRhawysSk%2BjvG7bVNy%2BJmEcbB0bIFLUVud1sZWJANv999iub1Rpzb6xIhZ5Z%0AsEDMob4UWxouKPfrRQcYlrI3X7d%2FVLfmnU%2FsSzpS6eHn%2Bf064zXXmf1tVIBwEKkq%0A%2FeaxgJyW8AM8XL5qL9RueHhihQm%2FG71cMVc5XXgoVy8%2Begx%2FaQm2u26d9ez1Vu80%0A4ptJoLAnjTdx1an5CKFikpvt2OYPZVFuWV6cqMMCksqzBSZKMu7wtaiEc%2FUN41UH%0AcQIDAQAB%0A-----END+PUBLIC+KEY-----'
  100     2        ASSIGN                                                   !2, 'Something+something+dark+side'
  101     3        INIT_FCALL                                               'easy_seal'
          4        SEND_VAR                                                 !2
          5        SEND_VAR                                                 !1
          6        SEND_VAL                                                 <true>
          7        DO_FCALL                                      0  $8      
          8        ASSIGN                                                   !3, $8
  103     9        INIT_FCALL                                               'var_dump'
         10        SEND_VAR                                                 !3
         11        DO_ICALL                                                 
  105    12        INIT_FCALL                                               'easy_unseal'
         13        SEND_VAR                                                 !3
         14        SEND_VAR                                                 !0
         15        SEND_VAL                                                 <true>
         16        DO_FCALL                                      0  $11     
         17        ASSIGN                                                   !4, $11
  106    18        INIT_FCALL                                               'var_dump'
         19        SEND_VAR                                                 !4
         20        DO_ICALL                                                 
         21      > RETURN                                                   1

Function easy_seal:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 9, Position 2 = 13
Branch analysis from position: 9
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 13
2 jumps found. (Code = 43) Position 1 = 25, Position 2 = 29
Branch analysis from position: 25
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 29
2 jumps found. (Code = 43) Position 1 = 30, Position 2 = 43
Branch analysis from position: 30
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 43
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/BNavp
function name:  easy_seal
number of ops:  51
compiled vars:  !0 = $plaintext, !1 = $publickey_string, !2 = $encode, !3 = $pubkey, !4 = $sealed, !5 = $ekeys, !6 = $result
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   11     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV_INIT                                        !2      <false>
   13     3        INIT_FCALL_BY_NAME                                       'openssl_get_publickey'
          4        SEND_VAR_EX                                              !1
          5        DO_FCALL                                      0  $7      
          6        ASSIGN                                                   !3, $7
   14     7        TYPE_CHECK                                    4          !3
          8      > JMPZ                                                     ~9, ->13
   15     9    >   NEW                                              $10     'Exception'
         10        SEND_VAL_EX                                              'Could+not+load+public+key'
         11        DO_FCALL                                      0          
         12      > THROW                                         0          $10
   17    13    >   ASSIGN                                                   !4, ''
   18    14        ASSIGN                                                   !5, <array>
   19    15        INIT_FCALL_BY_NAME                                       'openssl_seal'
         16        SEND_VAR_EX                                              !0
         17        SEND_VAR_EX                                              !4
         18        SEND_VAR_EX                                              !5
         19        INIT_ARRAY                                       ~14     !3
         20        SEND_VAL_EX                                              ~14
         21        DO_FCALL                                      0  $15     
         22        ASSIGN                                                   !6, $15
   20    23        TYPE_CHECK                                    4          !6
         24      > JMPZ                                                     ~17, ->29
   21    25    >   NEW                                              $18     'Exception'
         26        SEND_VAL_EX                                              'openssl_seal+failed%21'
         27        DO_FCALL                                      0          
         28      > THROW                                         0          $18
   23    29    > > JMPZ                                                     !2, ->43
   24    30    >   INIT_FCALL                                               'json_encode'
   25    31        INIT_FCALL                                               'bin2hex'
         32        SEND_VAR                                                 !4
         33        DO_ICALL                                         $20     
         34        INIT_ARRAY                                       ~21     $20
   26    35        INIT_FCALL                                               'bin2hex'
         36        FETCH_DIM_R                                      ~22     !5, 0
         37        SEND_VAL                                                 ~22
         38        DO_ICALL                                         $23     
         39        ADD_ARRAY_ELEMENT                                ~21     $23
         40        SEND_VAL                                                 ~21
         41        DO_ICALL                                         $24     
         42      > RETURN                                                   $24
   29    43    >   INIT_FCALL                                               'json_encode'
         44        INIT_ARRAY                                       ~25     !4
         45        FETCH_DIM_R                                      ~26     !5, 0
         46        ADD_ARRAY_ELEMENT                                ~25     ~26
         47        SEND_VAL                                                 ~25
         48        DO_ICALL                                         $27     
         49      > RETURN                                                   $27
   30    50*     > RETURN                                                   null

End of function easy_seal

Function easy_unseal:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 13, Position 2 = 21
Branch analysis from position: 13
2 jumps found. (Code = 43) Position 1 = 28, Position 2 = 32
Branch analysis from position: 28
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 32
2 jumps found. (Code = 43) Position 1 = 41, Position 2 = 45
Branch analysis from position: 41
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 45
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 21
filename:       /in/BNavp
function name:  easy_unseal
number of ops:  47
compiled vars:  !0 = $ciphertext, !1 = $privatekey_string, !2 = $encoded, !3 = $sealed, !4 = $ekey, !5 = $open_data, !6 = $privkey, !7 = $result
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   41     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV_INIT                                        !2      <false>
   43     3        INIT_FCALL                                               'json_decode'
          4        SEND_VAR                                                 !0
          5        SEND_VAL                                                 <true>
          6        DO_ICALL                                         $8      
          7        FETCH_LIST_R                                     $9      $8, 0
          8        ASSIGN                                                   !3, $9
          9        FETCH_LIST_R                                     $11     $8, 1
         10        ASSIGN                                                   !4, $11
         11        FREE                                                     $8
   44    12      > JMPZ                                                     !2, ->21
   45    13    >   INIT_FCALL                                               'hex2bin'
         14        SEND_VAR                                                 !3
         15        DO_ICALL                                         $13     
         16        ASSIGN                                                   !3, $13
   46    17        INIT_FCALL                                               'hex2bin'
         18        SEND_VAR                                                 !4
         19        DO_ICALL                                         $15     
         20        ASSIGN                                                   !4, $15
   48    21    >   ASSIGN                                                   !5, ''
   49    22        INIT_FCALL_BY_NAME                                       'openssl_get_privatekey'
         23        SEND_VAR_EX                                              !1
         24        DO_FCALL                                      0  $18     
         25        ASSIGN                                                   !6, $18
   50    26        TYPE_CHECK                                    4          !6
         27      > JMPZ                                                     ~20, ->32
   51    28    >   NEW                                              $21     'Exception'
         29        SEND_VAL_EX                                              'Could+not+load+public+key'
         30        DO_FCALL                                      0          
         31      > THROW                                         0          $21
   54    32    >   INIT_FCALL_BY_NAME                                       'openssl_open'
         33        SEND_VAR_EX                                              !3
         34        SEND_VAR_EX                                              !5
         35        SEND_VAR_EX                                              !4
         36        SEND_VAR_EX                                              !6
         37        DO_FCALL                                      0  $23     
         38        ASSIGN                                                   !7, $23
   55    39        TYPE_CHECK                                    4          !7
         40      > JMPZ                                                     ~25, ->45
   56    41    >   NEW                                              $26     'Exception'
         42        SEND_VAL_EX                                              'openssl_open+failed%21'
         43        DO_FCALL                                      0          
         44      > THROW                                         0          $26
   58    45    > > RETURN                                                   !5
   59    46*     > RETURN                                                   null

End of function easy_unseal

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
141.81 ms | 1415 KiB | 25 Q