3v4l.org

run code in 300+ PHP versions simultaneously
<?php if (PHP_VERSION_ID < 70000) exit; $res = openssl_pkey_new([ 'digest_alg' => 'sha256', 'private_key_bite' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA ]); openssl_pkey_export($res, $privateKey); $publicKey = openssl_pkey_get_details($res)['key']; $message = 'Prime Numbers Rock!'; $aesKey = random_bytes(32); // Basically a poor-man's HKDF by just using HMAC $keyE = hash_hmac('sha256', 'Encryption Key', $aesKey, true); $keyA = hash_hmac('sha256', 'Authentication Key', $aesKey, true); $iv = random_bytes(16); $ciphertext = openssl_encrypt($message, 'aes-256-ctr', $keyE, OPENSSL_RAW_DATA, $iv); $mac = hash_hmac('sha256', $iv .$ciphertext, $keyA, true); $combined = $mac . $iv . $ciphertext; $rsaCipher = ''; openssl_public_encrypt($aesKey, $rsaCipher, $publicKey, OPENSSL_PKCS1_OAEP_PADDING); $sendMe = $rsaCipher . $combined; var_dump(base64_encode($sendMe)); ## DECRYPTION ## $rsaPart = mb_substr($sendMe, 0, 256, '8bit'); // Assuming 2048-bit RSA $aesPart = mb_substr($sendMe, 256, null, '8bit'); $mac = mb_substr($aesPart, 0, 32, '8bit'); $iv = mb_substr($aesPart, 32, 16, '8bit'); $cipher = mb_substr($aesPart, 48, null, '8bit'); $aesKey = ''; openssl_private_decrypt($rsaPart, $aesKey, $privateKey, OPENSSL_PKCS1_OAEP_PADDING); $keyE = hash_hmac('sha256', 'Encryption Key', $aesKey, true); $keyA = hash_hmac('sha256', 'Authentication Key', $aesKey, true); $calc = hash_hmac('sha256', $iv . $cipher, $keyA, true); if (!hash_equals($calc, $mac)) { throw new Exception('MAC validation failure'); } $decrypted = openssl_decrypt($cipher, 'aes-256-ctr', $keyE, OPENSSL_RAW_DATA, $iv); var_dump($decrypted); // string(19) "Prime Numbers Rock!"
Output for 7.1.7
Warning: openssl_pkey_export(): cannot get key from parameter 1 in /in/nYVPf on line 8 Warning: openssl_pkey_get_details() expects parameter 1 to be resource, boolean given in /in/nYVPf on line 9 Warning: openssl_public_encrypt(): key parameter is not a valid public key in /in/nYVPf on line 23 string(92) "TgNrsdcHAKArUPlI86LvyFtDeO2JnER3YXBdrVlHYlDk3ITSVgMAq4yS+htRZHeqilfR3rrj01QbCWEt1sr6o1e7Cg==" Warning: openssl_private_decrypt(): key parameter is not a valid private key in /in/nYVPf on line 37 Fatal error: Uncaught Exception: MAC validation failure in /in/nYVPf:43 Stack trace: #0 {main} thrown in /in/nYVPf on line 43
Process exited with code 255.
Output for 7.1.6
Warning: openssl_pkey_export(): cannot get key from parameter 1 in /in/nYVPf on line 8 Warning: openssl_pkey_get_details() expects parameter 1 to be resource, boolean given in /in/nYVPf on line 9 Warning: openssl_public_encrypt(): key parameter is not a valid public key in /in/nYVPf on line 23 string(92) "RsSXZqCmJJVnAjoEB2rXLhWFfVx0z2dRLaxcSggvONthUPK2AMTKIvYowALV35grVXB2MD9Txr9v+UPYcahwfnXMig==" Warning: openssl_private_decrypt(): key parameter is not a valid private key in /in/nYVPf on line 37 Fatal error: Uncaught Exception: MAC validation failure in /in/nYVPf:43 Stack trace: #0 {main} thrown in /in/nYVPf on line 43
Process exited with code 255.
Output for 7.1.5
Warning: openssl_pkey_export(): cannot get key from parameter 1 in /in/nYVPf on line 8 Warning: openssl_pkey_get_details() expects parameter 1 to be resource, boolean given in /in/nYVPf on line 9 Warning: openssl_public_encrypt(): key parameter is not a valid public key in /in/nYVPf on line 23 string(92) "giEtf6LcVUAcqReEBETlJNaQZZP7wxfFt+eG+wNKpaRQScP7x9oXb1OruGNf3S67SdaGYch6MGPOtI4edGaZ17eEig==" Warning: openssl_private_decrypt(): key parameter is not a valid private key in /in/nYVPf on line 37 Fatal error: Uncaught Exception: MAC validation failure in /in/nYVPf:43 Stack trace: #0 {main} thrown in /in/nYVPf on line 43
Process exited with code 255.
Output for 7.1.0
string(432) "XEfAsibZLN2AaHF+ZficnVYfdsdgY7JNaxz+vSq928vme6FG5P62UAyfXHOdyYlt1ykiO3GI8riv9JtYRaOw2tGcutnJAI8oo/GdL4vr2DBWkOmeNeXC+Oe/0sLMcCHp91UUMKLdrgfQhchPmPpN40LfrBFeMf4x1Wy2rv+T4/kInZgHDUmLLQn4HWkDyghdNpx9uN1m5SI9ttRqDDwPx2DpqQVGtCwQh5fN4GInZiMgttKuWAoBcxox/Xdu9LxDavaxrCKtul0rFibPIQ6ojtJJp9qXtdhNegGggyQPB3EItyX25fh6YZxUZb2XySuFrAuAmtPXPKXgdaqJwrQctX6JFtkizeDosqCVgVu9kHBELeWwyx29hDbc0iuS7wM2k6ibjSPl6VujxsqdaTgcpXQ5wS8RiB7VlDt+oHP7Qo6TOfQ=" string(19) "Prime Numbers Rock!"
Output for 7.0.20
Warning: openssl_pkey_export(): cannot get key from parameter 1 in /in/nYVPf on line 8 Warning: openssl_pkey_get_details() expects parameter 1 to be resource, boolean given in /in/nYVPf on line 9 Warning: openssl_public_encrypt(): key parameter is not a valid public key in /in/nYVPf on line 23 string(92) "YjZvESbtAGkYJiD8pWMc1KHbUEXTfByq4O5TlGr/dhYYKUkUrnW1CUXZfhQs+HmZ0U1O0o0nZ8fn6inzEKAIBJYJJQ==" Warning: openssl_private_decrypt(): key parameter is not a valid private key in /in/nYVPf on line 37 Fatal error: Uncaught Exception: MAC validation failure in /in/nYVPf:43 Stack trace: #0 {main} thrown in /in/nYVPf on line 43
Process exited with code 255.
Output for 7.0.7
string(432) "jFcKwAAWWOqZi7UeamQdop0jG63s7AD7Rq8jAPpsq0ClqIiFqA0cK64SJQxWi1UbOgyw/1uAR9L1SpazPP2mLF+B9scwmVRJNs903f8x18t3QmmQCFAYdpeXw5PhJIGdV45J/2AqIyKSlvI2VooWIUlpJMVe5dNdszHjiC+CZ6EIpxFtCpYfeMLElBYXLCTc8mdoF22u7Mhy+GFv7zVK+GZmW1yFQuZOeqB0bIkVF7CX/7hccasvOlhBXkpKfEl7zusK5v4DUrclgqdfctaCFjecWdPvVczxa3qjaZkREm8rDEQMk8BKHE++OrKSoIaaZrzrPZOGIiwfQq2szhZFmPWkIvEUvMiozUxWgwfhGK04IftccU+7ZI8lo/gET45Xji1zCp72tY2A63PNrb/4qEcyKvAIUH9TBiaqpNYmsdUnoGU=" string(19) "Prime Numbers Rock!"
Output for 7.0.6
string(432) "UOIk6f/xyPjou9+dTcLkmiVcc2zk+3U/DbJpW9yURMIPPhpJvhGJ0rUGqcvqXFd1YIbeiF7k9PGo3p18edhNn6OOzkcQ3jk7S70fTs8mpeDBhBJFgmxWF+ei3TSz7HcqFZIHeEPTx2fbDIpRB4nesLbJLAie47Zi9VwrRg8yPBJYbeQvB/gJa1O/4SNqkYGxc8JGK+/R56/b7JwIxDL/yYIAPO0pWw6+42W9N+jU/qj+qbt0qPefLmrsMCA1CaRdBuVvr88no3I5ENA3VRGsDkx02QvULKNlsBDhpuCsVrzzImWGhHYI0b9AdhmPxSuheJo2pF3qv51i20mjCQ4M0+OI5tBS9Pb2tnYpqmhoGKFA+ie3zssfHERRGKcc7/VddmhsxCkhhku7ySiS3dP2uqchtlq8xX6Ft1n8q1vjHyIwAsc=" string(19) "Prime Numbers Rock!"
Output for 7.0.5
string(432) "svEoZIPQcuRZB+YMbhxAl84qIN1sdcxXDjBauDzKeJwwID4JApvNgelAf19UOMUmoyoZBpbsQ2boO3GXgNAWqtcOLbZIwQQz8+/6B/X2TKmfVP/l2HWeYQaHn6fHZe3rY8LwNQ2+V/kIJgORRakJqW0WXXrI52eLXKukOrps4WHvxMFZrAkp6tl7Rh0L+YAgg41g+XRbdNPGvFknrIES5ngWlW/lt/0VrCytaAQa6SJlVjFqHz58x4dnA1q7ypiMUELopHs1PDA6V9LMP4oi2x5kARckeaIXBbidix5bQQrYDbU0Vn0A/Hrv5A+PMJCT5+4vHyM3MdsF2aJwMqlyaUUWvRfXAZfEYj7NLe468OQ1UZSTkXBGXpbfSnGKgZFXLKKAcgrhLm8Qnt8YDLe1baMB4+vm0kakmd3L5YVxWKxmh/4=" string(19) "Prime Numbers Rock!"
Output for 7.0.4
string(432) "uLOi4Vv3vK1arYSJfIZBzqPXg8EF7k4+qYyLl4qLbPx/MT6PsqsYMgvAty+mRDmrB582c1MpIpQ6rNugJRrQpc5mY4OqJ3VNMLKLjSK1jxB6KrM+LBZ5rYGjIp5VEoNQs9IvxxQZsP8QuPuFbP4jYRBf9AH84UFRDrC16Gd4R9lT1CcJlD0ioawkXv9AqZmlUT/QNTtfRB/D+9WKVM7Vug8AjrmZfEa84Ncy1vfqhYMo6XxTZI3/hQJQEVTAugrXfN2a0pwgnf9OZFY9HHGQ7IpWwmlSjrFMiUFuoyNvyV8ThWHKC8YZB7Jf+B9sokK+rtu82hBRvw5LaffoSK9MSpSx0AROoViQ50PHPhT7TZrL6WY1uF7cG6TD/tnlBdoA+84HfvOVtAOAdj8Yb+HsW4TU21MGG632QaawDKv3JMf4qGs=" string(19) "Prime Numbers Rock!"
Output for 7.0.3
string(432) "QVyiG3ma0IbSvHpCR3KQAat3+kIQGFhrMM463dBsoFkixL4E/qUHI7e3vi0f5/vB95iFNX46AY8lK6sKwOw1HYLb+kPUC+9jeX7TEKwC3m5PRSP1uOFeQTCr/U1alZRUb3nau7vWr2BNKOAbKpQ0qtZHID/XEN8IX8QqOrroFxMSICUUjrSjkxReD2btVYR8eomArHIQHV5UyqGnJniEGX8UCsvumdxD0mNrWm9LUThO7BqYvbCcpfYUDT6ejY9TjcEALWyIT3LPTbOzwMnSG4wyCVXllJw+f8bFc3I7yANWzlZvo/OlT/ki5xb3TBTTv/wX2opUtzxmw9B0AYM5UO9oyM69S/7nlNy4RHk3cfDoSg/EPu8JWv50EaGXqKqsP23ERo8v0E0fwPCg2N8qymhcik7Ozgyrbfb1I8FA+BaksyM=" string(19) "Prime Numbers Rock!"
Output for 7.0.2
string(432) "EL6GkKTaKHGl+CzgLqRjY+oPZYGwiM8w+Xjies9dwNgj4wQjp9hHi3cwonirAX7YABloBFo8an6na6RvYXA6X3a2URxQTPl3DICWy7JB8EQUj05dR/ah+jBfX5odTrXKIMhSRfXqw8jryohVsKD+IIDTJELWi2ujAeyAr1xOsx/4Jf/E10Noib6wxQzjSApV55aJlofQJ8bMGhLaOFziYNQFM5IeSrRwvKUUPono+tOfaAi2N3W3v9BUhpdk+NERTgHvt9at4qx2WsEgcKbJK8kk56HVZTQlm+d/ytD/VtzjBytr34+woolCCcQd+xsew35P5DLqQj/PIAW3V96RXK01HBcwcKOkq6CavqYNmL4SNBeB7r8r8c2Ecv5C4VMxF08H/fOTMFkRSL9BYbrUTToP1Uyxd1ltwiKISPPOUR3bFlA=" string(19) "Prime Numbers Rock!"
Output for 7.0.1
string(432) "Osa8EmJ2YgNn52szRlyjrBIdhWAzJGxv2K1LsTdFx6jDAwiM3N1gtx0dY5VcX94UC2fRLaY+DmsxL7eCxrAEDFywxslHn/nRxbQNVsJNdcdowbCLkHY8kFk8ZU4mRCDbPqQmgYPTNlZpVjrqEIF/+4BwkhcVBpHvUaPjgahYJUbkp0CMm/hvbPMRXBiyUpE4ZMCLTX2bcbIKKMPjntsENe7WfOmgkH5ByGIv6Oj9O5dGk8W2BGkZ3c/ayWABr12w16Qh4FGUwa5wTp9Pj2rgIkxmgJ3rvA+oXXN+xuOq+2CkaY+qJeRzwQAqpH4wUP58v/Df7UwuAzgXXtBfpgA/+q+5RFRUVPro2UG/UFu2JjWo2swKsIM7sFn1jmcVwuHkVVPZBB3+yXIzOwmeSpTAKS5HtYgwVozFW4bl9xBGlSxrnro=" string(19) "Prime Numbers Rock!"
Output for 7.0.0
string(432) "TVzKwfPYWNSsd1WR7a5NjtfAZLHsvwDY34MTYBdagUyTueDDXa7AwpMwxjtVsIpjqBOYZjlYmoD+JQqMSr4O1Yhr1Zw8hnFLkGuzPjDfr8RxJullGzMAElJzP/I1Zn3dKgGAvYbr9YWd0FYVSEB0MJuUs0JLIgaxJ9hse98aa4vd7wFSzf/2D01FjFV2T3Py426L4zAoZbM++tmfWzTBmXPPEsL0VWffmENJ2/okQ3EP0wFiEYmxLYNqKUHOQVFc7OJkQOEcYU2Tdegc2bewGA/MI9AzUEVTB5qjdnONVLQQUj9I1bPHwdISS5YeDHsP7jbJkq4d42+mmWAXDEgsSrXED1KqpAiDqRmF3FbfakXo5Jbllq4xyhEE1AK6tQJu4zO0YuH2BSILdGusVbpHuAISje1HK5VpD8Q3DLv2L26Lvv0=" string(19) "Prime Numbers Rock!"
Output for 5.5.0 - 5.5.36, 5.6.0 - 5.6.28

preferences:
51.76 ms | 429 KiB | 5 Q