Result table
The table hereafter is the result of all benchmarks with our development environment. It is given to help you to select the appropriate algorithms for your application.
The use of the algorithm ECDH-ES
with curves P-256
, P-384
or P-521
is not recommended with PHP7.1 or 7.2. The cryptographic operations with those curves are done using a pure PHP function and hence very slow.
The use of the RSA algorithms with a very long key (more that 4096 bits) is quite slow, but offers a good protection.
The PBES2* algorithms are quite slow, but also offer a good protection (see https://en.wikipedia.org/wiki/PBKDF2). Default salt size (512 bits) and iterations (4096) and custom values (256/1024) used for the tests. Those values can be configured if needed.
subject | groups | mean |
sign | JWS,EdDSA,Ed25519 | 139.323μs |
verify | JWS,EdDSA,Ed25519 | 169.125μs |
sign | JWS,ECDSA,ES256 | 139.144μs |
verify | JWS,ECDSA,ES256 | 223.170μs |
sign | JWS,ECDSA,ES384 | 941.535μs |
verify | JWS,ECDSA,ES384 | 1,075.417μs |
sign | JWS,ECDSA,ES512 | 504.271μs |
verify | JWS,ECDSA,ES512 | 826.615μs |
sign | JWS,hmac,HS256 | 19.593μs |
verify | JWS,hmac,HS256 | 24.045μs |
sign | JWS,hmac,HS384 | 20.061μs |
verify | JWS,hmac,HS384 | 24.672μs |
sign | JWS,hmac,HS512 | 19.838μs |
verify | JWS,hmac,HS512 | 24.935μs |
sign | JWS,none | 14.021μs |
verify | JWS,none | 17.317μs |
sign | JWS,RSASign,PS256 | 1,310.264μs |
verify | JWS,RSASign,PS256 | 121.113μs |
sign | JWS,RSASign,PS384 | 1,300.622μs |
verify | JWS,RSASign,PS384 | 119.065μs |
sign | JWS,RSASign,PS512 | 1,302.404μs |
verify | JWS,RSASign,PS512 | 117.445μs |
sign | JWS,RSASign,RS256 | 1,280.885μs |
verify | JWS,RSASign,RS256 | 106.382μs |
sign | JWS,RSASign,RS384 | 1,280.652μs |
verify | JWS,RSASign,RS384 | 297.263μs |
sign | JWS,RSASign,RS512 | 1,659.753μs |
verify | JWS,RSASign,RS512 | 119.476μs |
encryption/decryption | JWE,GCMKW,A128GCMKW | 63.022μs, 60.639μs, 58.909μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
encryption/decryption | JWE,GCMKW,A128GCMKW | 48.335μs, 50.021μs, 49.393μs (with A128GCM, A192GCM, A256GCM respectively) |
encryption/decryption | JWE,GCMKW,A192GCMKW | 59.719μs, 59.396μs, 60.329μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
encryption/decryption | JWE,GCMKW,A192GCMKW | 48.432μs, 49.295μs, 50.244μs (with A128GCM, A192GCM, A256GCM respectively) |
encryption/decryption | JWE,GCMKW,A256GCMKW | 60.966μs, 60.621μs, 59.821μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
encryption/decryption | JWE,GCMKW,A256GCMKW | 48.894μs, 49.165μs, 49.224μs (with A128GCM, A192GCM, A256GCM respectively) |
encryption/decryption | JWE,KW,A128KW | 159.758μs, 176.995μs, 210.580μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
encryption/decryption | JWE,KW,A128KW | 93.752μs, 117.309μs, 162.917μs (with A128GCM, A192GCM, A256GCM respectively) |
encryption/decryption | JWE,KW,A192KW | 137.808μs, 176.636μs, 214.446μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
encryption/decryption | JWE,KW,A192KW | 104.048μs, 122.472μs, 138.150μs (with A128GCM, A192GCM, A256GCM respectively) |
encryption/decryption | JWE,KW,A256KW | 139.867μs, 176.727μs, 208.664μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
encryption/decryption | JWE,KW,A256KW | 93.840μs, 115.313μs, 140.135μs (with A128GCM, A192GCM, A256GCM respectively) |
encryption | JWE,RSAEnc,RSA1_5 | from 178.368μs to 373.941μs (depending on the Content Encryption Algorithm and the key size) |
decryption | JWE,RSAEnc,RSA1_5 | from 354.921μs to 10,148.146μs (depending on the Content Encryption Algorithm and the key size) |
encryption | JWE,RSAEnc,RSA-OAEP | from 188.228μs to 428.624μs (depending on the Content Encryption Algorithm and the key size) |
decryption | JWE,RSAEnc,RSA-OAEP | from 381.853μs to 13,079.733μs (depending on the Content Encryption Algorithm and the key size) |
encryption | JWE,RSAEnc,RSA-OAEP-256 | from 195.231μs to 410.868μs (depending on the Content Encryption Algorithm and the key size) |
decryption | JWE,RSAEnc,RSA-OAEP-256 | from 354.090μs to 11,238.001μs (depending on the Content Encryption Algorithm and the key size) |
encryption/decryption | JWE,PBES2,PBES2HS256A128KW | from 2,109.175μs (256 bit salt / 1024 counts) to 7,943.047μs (512 bit salt / 4096 counts) |
encryption/decryption | JWE,PBES2,PBES2HS384A192KW | from 2,719.313μs (256 bit salt / 1024 counts) to 10,466.043μs (512 bit salt / 4096 counts) |
encryption/decryption | JWE,PBES2,PBES2HS256A128KW | from 2,746.634μs (256 bit salt / 1024 counts) to 10,600.124μs (512 bit salt / 4096 counts) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA128KW | ~45,198.922μs (with curve P-256) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA128KW | ~77,320.816μs (with curve P-384) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA128KW | ~120,709.648μs (with curve P-521) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA128KW | ~453.445μs (with curve X25519) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA128KW | ~21,249.059μs (with curve P-256) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA128KW | ~37,207.750μs (with curve P-384) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA128KW | ~57,072.871μs (with curve P-521) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA128KW | ~387.441μs (with curve X25519) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA192KW | ~44,697.707μs (with curve P-256) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA192KW | ~76,731.773μs (with curve P-384) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA192KW | ~124,164.813μs (with curve P-521) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA192KW | ~501.742μs (with curve X25519) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA192KW | ~21,603.676μs (with curve P-256) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA192KW | ~36,172.617μs (with curve P-384) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA192KW | ~55,530.465μs (with curve P-521) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA192KW | ~378.129μs (with curve X25519) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA256KW | ~44,701.426μs (with curve P-256) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA256KW | ~76,805.012μs (with curve P-384) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA256KW | ~121,017.648μs (with curve P-521) |
encryption | JWE,ECDHES,ECDHESKW,ECDHESA256KW | ~451.094μs (with curve X25519) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA256KW | ~21,335.781μs (with curve P-256) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA256KW | ~36,207.594μs (with curve P-384) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA256KW | ~55,440.664μs (with curve P-521) |
decryption | JWE,ECDHES,ECDHESKW,ECDHESA256KW | ~377.367μs (with curve X25519) |
encryption | JWE,ECDHES | ~44,762.633μs (with curve P-256) |
encryption | JWE,ECDHES | ~76,660.664μs (with curve P-384) |
encryption | JWE,ECDHES | ~119,539.141μs (with curve P-521) |
encryption | JWE,ECDHES | ~369.992μs (with curve X25519) |
decryption | JWE,ECDHES | ~21,894.422μs (with curve P-256) |
decryption | JWE,ECDHES | ~37,380.137μs (with curve P-384) |
decryption | JWE,ECDHES | ~58,231.930μs (with curve P-521) |
decryption | JWE,ECDHES | ~263.254μs (with curve X25519) |