3v4l.org

run code in 300+ PHP versions simultaneously
<?php /* note: the password_hash and password_verify functions are just easy-to-use wrappers around existing crypt() functionality with secure defaults. However, while _verify will read all supported crypt algos, _hash will only produce hashes for specific algos. This is intended to increase security, but unfortunately limits compatibility with dovecot. These two functions will allow you to create and verify compatible hashes. If your version of PHP is missing password_* or random_* functions there are forward-compatibility packages available from the people who contributed those functions to PHP: https://github.com/ircmaxell/password_compat https://github.com/paragonie/random_compat */ function dovecot_sha512_crypt($plain, $rounds=8000) { $salt = random_bytes(16); $prefix = sprintf('$6$rounds=%d$%s$', $rounds, base64_encode($salt)); return '{SHA512-CRYPT}' . crypt($plain, $prefix); } function dovecot_verify($plain, $hash) { $stripped = preg_replace('/^[^\$]*/', '', $hash); return password_verify($plain, $stripped); } $dovecot_pw = '{SHA512-CRYPT}$6$rounds=8000$kOIAPAIzsgLJSTTP$7LIscGpSgWgKfR6l1ZrArkGa.p7MUgl1WT9t/K/lgPhsnggXdCuQ7cEJ.qLoXKEn61DlZrjSu4ryEGUbg50rc/'; //created with dovecot-pw var_dump( dovecot_verify('foobar', $dovecot_pw), dovecot_sha512_crypt('foobar') );
Output for 7.1.10
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$avilKzhArTQaPHyZ$eW.KzNjEc1Vdt4Q.MZwGB3f8ACX9dfR8Pa/5KVbPZb6T0ZSvdHhlJykkdLgqyNvJUkVH2dtjsFp8AanPdEVVi."
Output for 7.1.9
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$Px0iIXfBv0Y6EijG$ezJ5FowAEiRCVrba5F4hB/Rs7xsSrLXeqXrZ0tu3/U1vP8XqhwZAvlc4nuRjSY5vnCI5ZWH7Uv09A2ND9ap2f."
Output for 7.1.8
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$4Kw1d00oM2gIIRAo$21adVTuo9WAigAPCDUT31flplRsrGJYPriMznSVGfE/02MLzWPewc/uZhnghTpl9O.nIVV0ytFqkxsU91kU93."
Output for 7.1.7
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$yrh8aG89jH/Zex/k$qiE7koMqeHDLiMNU7afrUcu3Ncf6yGwdct.FuHgJEp07916Clraz7HA8yJzmfDMlWho5egn2RsEW5XScXEcRq1"
Output for 7.1.6
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$UEISz0L/G1yhcbEf$Z.Woe4jzq5H.EJgLAKa6/Zr3t92pwXYSiumNlN1XIlSTAIWaYLuM8S3cQGrbcedopIKyCmf/auKEG6/Reze1i1"
Output for 7.1.5
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$ZioJWNh53SdMinNm$AtZPAh0g0zq4JoTGBuVLYNlp9L8R/mCz475KIOy/oN0ndnS1lcjkWawBeJJaoULPrCYIID1CpOW3EU8IxPifw1"
Output for 7.1.4
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$jiF7diCaLDoLysS9$dcikBAPMYH5Cz3Au0mxqqXfX/fxMsDhdXy9Z5Lno9OMZCHQcXOp4yW0D1NcNtBQM3QS7yrwYBebieI3qzencf."
Output for 7.1.3
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$Qo01oDKJ0k1aqAqM$EPdprNp9NCkfolHpXPl0ZIyxtEzOggjxTrtSBrr2Mp.ytORPn8oF189npYZVEGOZEu9ThtfeJgknmf31MnqnE1"
Output for 7.1.2
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$BMjazRz9SuBWnX/C$L7iEqeVhvDtHT5gWlvod1CcflUMIg2yFfuUYnJKR3OA9m3wga88VLC65tQMNj.SNGjiHKSnSEw8y7Ivb9NU6H."
Output for 7.1.1
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$OG0u5LIHsgISmbBh$TTusmxXCBIMI3iPp1xxwz5.t6gp.1XQHeTR7n955O9hfik7NN7YB.TwCwvuYr0ScDpXgoPZqb32LRechixt721"
Output for 7.1.0
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$Us9MZiOmBqg1g1o9$C3VEgO3PH.Z5w1UwPG3IOFYJJmikH6SitoWraDGsZ7HpQKb/ouYRP0/eBy9XpDzekNfnnPok7w0mTpMq/1W9W/"
Output for 7.0.24
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$kNNLz1siX5+CPnTk$qETUXchKjzwZQC2KdZkuoHn3eEDnJTgZCFrBM33lCqt8Dw6Uzl.AkiHO62Iy2EEDkMtYolFRSW/XqfYoBVtA6."
Output for 7.0.23
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$kaJ3dCxI+4pLnIQR$neW4oeWWm4mEHCUHwhiXTx8gMLbt.7rE93QpU/i87ZybbeFrE.vdZOkKsFrHbK1Vt7KvzaEcHnXLdyM6oX6ov1"
Output for 7.0.22
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$z8r5h8OPjgGzjA9A$Y/AP/qqKBFt3Jq7cZzhkRWI1eRKm3Jdn8PzeSQIjTA1TcoWftvQlnjSmvFx0hAdcfI/y9sjYLcDwB6dXymGWM."
Output for 7.0.21
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$PlIjMIhwCBS0bqcJ$7fs/bmjL9NYrBNtWcj8Tu8FzwSOo3.I.nJlou6WlnHFCDTL6sz89d6Xpw2wx42pMAdZ0Ad5PBngP7J17trxSM."
Output for 7.0.20
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$n5792hUIB8UCDIWF$NYc4PftV.bXtewFaAG4bFoWl5/6PNxErr8ayFKDEEtc3Gt.NBPbdtfswRKiEVM0roctPcn1ojXDk0c3i0Xs9Y."
Output for 7.0.19
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$0EvzO++LyjPYrwf1$/KOchG3t6ee2aI66vSFixDUjQdUi/jRHmZYpAiDMJbNVBqf0fmvwcuQOKAxgRm/MfrChjZ2DpX0XLOsQ/7ISB0"
Output for 7.0.18
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$pixoEjU3Gs+ZlX2S$t0n4YMzBfsDTkeXrWXR5WSzr2wRvBIyJp/kynNEKVkWt5yG6/sCqn5D12xSR1UI3FRHwjC/OEchfV2h/D0Ert0"
Output for 7.0.17
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$PkMPqIGWNC4O+fcW$nz0tKXfW/..M3.7amdaW3E1DSU5tqg.8Np900rDhldV8lkWmLm1vpRK/2YdagM4AjcjNVEtrkh3LGS7w9FmJL1"
Output for 7.0.16
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$4fIhWEzTL4PgI+Cn$TejDZ3G3ZmrQNDgCU0miRCH9tUa.JEAhJpoGECmMD5mdzQa0bvB/VgAoANkCqjhPSGm35HoW7Ltl2SipT.pj20"
Output for 7.0.15
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$MOfEgoGiKr7Zol/h$LBbbaQ/tTEGG/kfWfhjjUFOAwEfDMar.1B43d2ntEs4NiWqAYRFO/PWADRhRtkhQ9j6rbbCU4ctRaH6bRV6iA0"
Output for 7.0.14
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$CHCek6KyBi4+8DIP$yRw80k8w5f7KmkKuAOXtpLDCcW5ueEeTS2yIoi/fhwB0lGnq80jD6dl8mLKZlzACMD6Z22Si3uC/Cni/mYzri."
Output for 7.0.13
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$cs/JL5DwGcL4oeAO$VqWKELvBEFcub3clbroV8R2PnpOicwXSWSBYQPGHmjjbyw9TjK8GoWary5EHgC19LSkjbJn6yMt2OIsqzutwR1"
Output for 7.0.12
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$58Xa8HDABxdmmFhz$7MdwwoMEnmzTo7jn.XduKkQGykhRts4K2XsgfS925EErdgw2w1L00KxYRbdrgMJ8YljbOZs0n4/Gis7hGxZCo1"
Output for 7.0.11
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$XWtBEr4bVSnHoRqn$sF3YwItMrBjZBQpnSGZcqBo/Ej23rmtbFg6wDonKzYscGce2hvMxd5Uz8AukfVWiZCpLTda8DDEYr8JPNOJD71"
Output for 7.0.10
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$0V0r7WwFxzGJHG8O$hJfWFlkkuZAob82FtvnI9nrdLKBKMeMoOsZBmtK.s9epS9q6.KPRaEhv8sAG1llJQB714imoWfv1QOLRZ85QU/"
Output for 7.0.9
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$Txg4lgZv1n05Ivyj$ABOV94348JNmMcQ8eUsXEr0DOUsvmv9BsF2l3hNEMhbxTl5MoWAfDTi9H9kJH1bZtQOADmJYkoJBmSFwq3eav."
Output for 7.0.8
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$wSdtpHSMqYP6GgpY$oSw9myHsLwz6un6.JPftwOy34liNk.XQqvUqICOYmJQdsiVJoRKpqDjgvpNYh4Eac1FN3fXqHReNdYjsC0sss0"
Output for 7.0.7
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$sdz0eRlxdzyu4T07$B7873jan4/bSUM6xj04cYSj00g2NdUt6nicEtbJYkmcDrUVVXmA2EiBQnoQgU8mbSXMCewHBsuzyh0SNaw63f/"
Output for 7.0.6
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$z/gGvicEH6tuTygi$OGn77YpBsh.jTWaYNpd8fxcy424G1qggb.g1WRkjlHPwcyFTQxfz/xuzRBJhdDpgYRrlsnodcIkq9OkMfICvR."
Output for 7.0.5
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$PpvgyoGuhVMNvE6x$srcIGifnWkICRv2G4HmgmI2K26KI27g4TfSb7WRUXR.MSRjmKOlTWPovAzWGxoUrI7BMUw5PTwooWQowtugtY."
Output for 7.0.4
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$rJMGM21iLzZSdjdV$3nU2rKnEafcZ.jj.EVf3fOljhYbZ.JvZ1LHNQ3XQX0nllHajJpXd5X8x0Mn1wcGvWLtBKMgrqYZqZ33.zZI55."
Output for 7.0.3
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$g47yakmSa5veJTBT$cvVJ5dLIXf5oEQj0SXGGkSDKhYXKsBxBbEcejlJtYV3bzRlM/JnTf2Tm75n85TJsYEX2YOztxB72NkSWiCkHw0"
Output for 7.0.2
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$rDqclEgfcJKnuKbx$RZplYjqD/YNqUkbefmLp.tayjbMhDqAW33HfKFKPJUK3W6/C1wiakZoHwFWkGDDb7xwN8Ga.10QfizNtyLjrK."
Output for 7.0.1
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$YnbRy3z60W3vaOz0$4GiIJyMghdpw5vCmW0ONYjEVILy1hfa9E3ODOVJKs02G/p7cF1GG3cN7dCvkqwuoWF01C1E49PkGm0X1T/lWW/"
Output for 7.0.0
bool(true) string(132) "{SHA512-CRYPT}$6$rounds=8000$8KnKxbBf5i6F33kN$c/XvFMx4CXiUeBvMU17PiJRGO5SiEPSfvkhY2MZhp0IS2TaVdHVZpM.ZjW1NN9BEgd.eh75r/5pv69L9ayIkG/"

preferences:
70.81 ms | 401 KiB | 41 Q