@ 2017-10-10T20:29:28Z <?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')
);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
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:dark mode live preview
70.81 ms | 401 KiB | 41 Q