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);

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0210.00018.43
8.3.50.0070.00716.46
8.3.40.0080.00818.83
8.3.30.0110.00418.88
8.3.20.0050.00320.18
8.3.10.0000.00721.72
8.3.00.0050.00317.93
8.2.180.0120.00616.75
8.2.170.0120.00622.96
8.2.160.0070.00720.21
8.2.150.0030.00524.18
8.2.140.0030.00524.66
8.2.130.0080.00026.16
8.2.120.0060.00317.75
8.2.110.0030.00619.31
8.2.100.0060.00617.63
8.2.90.0050.00319.03
8.2.80.0030.00517.97
8.2.70.0060.00317.50
8.2.60.0030.00617.91
8.2.50.0050.00318.07
8.2.40.0060.00319.28
8.2.30.0000.00820.68
8.2.20.0080.00017.73
8.2.10.0040.00418.16
8.2.00.0030.00517.98
8.1.280.0070.01325.92
8.1.270.0040.01522.11
8.1.260.0090.00026.35
8.1.250.0000.00728.09
8.1.240.0030.00623.97
8.1.230.0090.00317.63
8.1.220.0000.00817.74
8.1.210.0040.00418.77
8.1.200.0030.00617.35
8.1.190.0080.00017.25
8.1.180.0080.00018.10
8.1.170.0040.00418.54
8.1.160.0040.00421.89
8.1.150.0000.00718.90
8.1.140.0000.00917.39
8.1.130.0040.00417.68
8.1.120.0070.00017.35
8.1.110.0040.00417.36
8.1.100.0040.00417.34
8.1.90.0000.00817.36
8.1.80.0060.00317.27
8.1.70.0070.00017.33
8.1.60.0030.00617.48
8.1.50.0040.00417.56
8.1.40.0060.00317.41
8.1.30.0080.00017.66
8.1.20.0040.00417.73
8.1.10.0000.00717.62
8.1.00.0030.00617.52
8.0.300.0080.00018.77
8.0.290.0040.00416.75
8.0.280.0030.00318.41
8.0.270.0000.00717.25
8.0.260.0030.00317.28
8.0.250.0000.00716.97
8.0.240.0030.00317.01
8.0.230.0000.00716.89
8.0.220.0000.00716.92
8.0.210.0040.00416.92
8.0.200.0000.00717.00
8.0.190.0000.00716.87
8.0.180.0060.00316.86
8.0.170.0000.00716.91
8.0.160.0080.00016.88
8.0.150.0000.00716.76
8.0.140.0050.00316.94
8.0.130.0060.00013.38
8.0.120.0000.00916.80
8.0.110.0040.00416.93
8.0.100.0000.00816.85
8.0.90.0070.00016.98
8.0.80.0060.00917.00
8.0.70.0050.00316.88
8.0.60.0000.00716.84
8.0.50.0070.00017.02
8.0.30.0080.00917.33
8.0.20.0140.00717.40
8.0.10.0040.00416.87
8.0.00.0120.00616.80
7.4.330.0050.00015.08
7.4.320.0030.00316.52
7.4.300.0070.00316.56
7.4.290.0070.00316.57
7.4.280.0100.00016.55
7.4.270.0070.00016.60
7.4.260.0030.00316.55
7.4.250.0040.00416.43
7.4.240.0080.00016.64
7.4.230.0020.00516.64
7.4.220.0060.01216.63
7.4.210.0040.01116.63
7.4.200.0070.00016.59
7.4.160.0070.01016.54
7.4.150.0100.00717.40
7.4.140.0180.00517.86
7.4.130.0090.00916.66
7.4.120.0140.00416.54
7.4.110.0170.00316.52
7.4.100.0100.00716.57
7.4.90.0070.01716.61
7.4.80.0090.00919.39
7.4.70.0140.00316.39
7.4.60.0070.01016.40
7.4.50.0040.00416.34
7.4.40.0120.00616.67
7.4.30.0040.01416.53
7.4.00.0000.01315.09
7.3.330.0050.00013.20
7.3.320.0050.00013.20
7.3.310.0000.00716.37
7.3.300.0000.00716.21
7.3.290.0120.00516.35
7.3.280.0110.00516.29
7.3.270.0140.00417.40
7.3.260.0100.00716.48
7.3.250.0080.01116.44
7.3.240.0090.00916.34
7.3.230.0140.00316.54
7.3.210.0130.00616.36
7.3.200.0100.00616.28
7.3.190.0060.00916.51
7.3.180.0090.00616.37
7.3.170.0070.01416.63
7.3.160.0100.00716.38
7.2.330.0100.00716.61
7.2.320.0170.00316.37
7.2.310.0130.00616.59
7.2.300.0170.00616.47
7.2.290.0090.00916.67
7.2.60.0050.00516.64
7.2.00.0060.00919.53
7.1.200.0060.00615.77
7.1.100.0000.01618.68
7.1.70.0030.01017.26
7.1.60.0130.01919.19
7.1.50.0030.00917.34
7.1.00.0070.07722.74
7.0.200.0030.00616.61
7.0.90.0030.08721.91
7.0.80.0070.08321.90
7.0.70.0000.08721.97
7.0.60.0030.07321.91
7.0.50.0030.09022.33
7.0.40.0100.08320.30
7.0.30.0070.08720.28
7.0.20.0030.07020.35
7.0.10.0070.06320.11
7.0.00.0070.08320.25
5.6.280.0030.05321.25
5.6.240.0030.08720.79
5.6.230.0100.07320.91
5.6.220.0130.07020.86
5.6.210.0200.06020.69
5.6.200.0070.06021.33
5.6.190.0030.07721.30
5.6.180.0030.08721.34
5.6.170.0070.07721.29
5.6.160.0030.08021.21
5.6.150.0030.05021.10
5.6.140.0070.08021.13
5.6.130.0000.09021.24
5.6.120.0030.08021.30
5.6.110.0100.07021.14
5.6.100.0000.08321.29
5.6.90.0030.06721.17
5.6.80.0100.08020.73
5.6.70.0000.07320.73
5.6.60.0000.08020.57
5.6.50.0000.05720.69
5.6.40.0170.06720.65
5.6.30.0100.07020.64
5.6.20.0030.08020.52
5.6.10.0130.03720.52
5.6.00.0030.08720.48
5.5.380.0130.07020.63
5.5.370.0100.08320.70
5.5.360.0000.09020.57
5.5.350.0030.08020.56
5.5.340.0130.04320.82
5.5.330.0070.08021.10
5.5.320.0030.07720.91
5.5.310.0000.07321.02
5.5.300.0030.08021.05
5.5.290.0030.07720.99
5.5.280.0070.04721.16
5.5.270.0100.08021.00
5.5.260.0100.08021.08
5.5.250.0030.05320.64
5.5.240.0000.05720.31
5.5.230.0000.08020.39
5.5.220.0070.07720.25
5.5.210.0030.08020.57
5.5.200.0070.06720.38
5.5.190.0130.07720.54
5.5.180.0030.06320.43
5.5.160.0030.08320.47
5.5.150.0130.07720.42
5.5.140.0030.07720.38
5.5.130.0130.07020.41
5.5.120.0070.08020.36
5.5.110.0000.08320.43
5.5.100.0000.04720.14
5.5.90.0070.07020.23
5.5.80.0030.07720.33
5.5.70.0000.08720.29
5.5.60.0030.08320.35
5.5.50.0170.06320.28
5.5.40.0070.08320.28
5.5.30.0100.07020.24
5.5.20.0030.09020.30
5.5.10.0030.08320.23
5.5.00.0130.07320.25
5.4.450.0100.07319.43
5.4.440.0070.07019.57
5.4.430.0070.08019.52
5.4.420.0100.07319.50
5.4.410.0070.07719.46
5.4.400.0070.07019.23
5.4.390.0070.07319.10
5.4.380.0070.07019.37
5.4.370.0070.04319.11
5.4.360.0000.07719.26
5.4.350.0100.05319.38
5.4.340.0070.08019.29
5.4.320.0030.08019.36
5.4.310.0100.07019.26
5.4.300.0070.06319.29
5.4.290.0170.06319.36
5.4.280.0100.07319.40
5.4.270.0030.07719.31
5.4.260.0100.03319.31
5.4.250.0070.06719.25
5.4.240.0070.04719.40
5.4.230.0000.06319.22
5.4.220.0100.06019.11
5.4.210.0100.06719.40
5.4.200.0070.07319.13
5.4.190.0000.07019.22
5.4.180.0070.06719.39
5.4.170.0070.06719.35
5.4.160.0070.07319.07
5.4.150.0130.07719.21
5.4.140.0030.07316.43
5.4.130.0030.03716.41
5.4.120.0030.05016.40
5.4.110.0000.07316.56
5.4.100.0030.04716.55
5.4.90.0030.07016.44
5.4.80.0000.07716.50
5.4.70.0030.07016.47
5.4.60.0100.06716.42
5.4.50.0030.07316.41
5.4.40.0000.05016.50
5.4.30.0070.06316.41
5.4.20.0100.06316.48
5.4.10.0030.06716.41
5.4.00.0070.04315.75

preferences:
72.52 ms | 400 KiB | 5 Q