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) { $sealed = bin2hex($sealed); foreach ($ekeys as $i => $key) { $ekeys[$i] = bin2hex($key); } } return json_encode([$sealed, $ekeys]); } /** * 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, $ekeys) = json_decode($ciphertext, true); if ($encoded) { $sealed = hex2bin($sealed); foreach ($ekeys as $i => $key) { $ekeys[$i] = hex2bin($key); } } $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, $ekeys[0], $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);
Output for git.master, git.master_jit, rfc.property-hooks
Fatal error: Uncaught Error: Call to undefined function openssl_get_publickey() in /in/r7Esp:13 Stack trace: #0 /in/r7Esp(103): easy_seal('Something somet...', '-----BEGIN PUBL...', true) #1 {main} thrown in /in/r7Esp on line 13
Process exited with code 255.

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
47.74 ms | 401 KiB | 8 Q