3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php /** * A Compatibility library with PHP 5.5's simplified password hashing API. * * @author Anthony Ferrara <ircmaxell@php.net> * @license http://www.opensource.org/licenses/mit-license.html MIT License * @copyright 2012 The Authors */ if (!defined('PASSWORD_DEFAULT')) { define('PASSWORD_BCRYPT', 1); define('PASSWORD_DEFAULT', PASSWORD_BCRYPT); /** * Hash the password using the specified algorithm * * @param string $password The password to hash * @param int $algo The algorithm to use (Defined by PASSWORD_* constants) * @param array $options The options for the algorithm to use * * @return string|false The hashed password, or false on error. */ function password_hash($password, $algo, array $options = array()) { if (!function_exists('crypt')) { trigger_error("Crypt must be loaded for password_hash to function", E_USER_WARNING); return null; } if (!is_string($password)) { trigger_error("password_hash(): Password must be a string", E_USER_WARNING); return null; } if (!is_int($algo)) { trigger_error("password_hash() expects parameter 2 to be long, " . gettype($algo) . " given", E_USER_WARNING); return null; } switch ($algo) { case PASSWORD_BCRYPT: // Note that this is a C constant, but not exposed to PHP, so we don't define it here. $cost = 10; if (isset($options['cost'])) { $cost = $options['cost']; if ($cost < 4 || $cost > 31) { trigger_error(sprintf("password_hash(): Invalid bcrypt cost parameter specified: %d", $cost), E_USER_WARNING); return null; } } // The length of salt to generate $raw_salt_len = 16; // The length required in the final serialization $required_salt_len = 22; $hash_format = sprintf("$2y$%02d$", $cost); break; default: trigger_error(sprintf("password_hash(): Unknown password hashing algorithm: %s", $algo), E_USER_WARNING); return null; } if (isset($options['salt'])) { switch (gettype($options['salt'])) { case 'NULL': case 'boolean': case 'integer': case 'double': case 'string': $salt = (string) $options['salt']; break; case 'object': if (method_exists($options['salt'], '__tostring')) { $salt = (string) $options['salt']; break; } case 'array': case 'resource': default: trigger_error('password_hash(): Non-string salt parameter supplied', E_USER_WARNING); return null; } if (strlen($salt) < $required_salt_len) { trigger_error(sprintf("password_hash(): Provided salt is too short: %d expecting %d", strlen($salt), $required_salt_len), E_USER_WARNING); return null; } elseif (0 == preg_match('#^[a-zA-Z0-9./]+$#D', $salt)) { $salt = str_replace('+', '.', base64_encode($salt)); } } else { $buffer = ''; $buffer_valid = false; if (function_exists('mcrypt_create_iv') && !defined('PHALANGER')) { $buffer = mcrypt_create_iv($raw_salt_len, MCRYPT_DEV_URANDOM); if ($buffer) { $buffer_valid = true; } } if (!$buffer_valid && function_exists('openssl_random_pseudo_bytes')) { $buffer = openssl_random_pseudo_bytes($raw_salt_len); if ($buffer) { $buffer_valid = true; } } if (!$buffer_valid && is_readable('/dev/urandom')) { $f = fopen('/dev/urandom', 'r'); $read = strlen($buffer); while ($read < $raw_salt_len) { $buffer .= fread($f, $raw_salt_len - $read); $read = strlen($buffer); } fclose($f); if ($read >= $raw_salt_len) { $buffer_valid = true; } } if (!$buffer_valid || strlen($buffer) < $raw_salt_len) { $bl = strlen($buffer); for ($i = 0; $i < $raw_salt_len; $i++) { if ($i < $bl) { $buffer[$i] = $buffer[$i] ^ chr(mt_rand(0, 255)); } else { $buffer .= chr(mt_rand(0, 255)); } } } $salt = str_replace('+', '.', base64_encode($buffer)); } $salt = substr($salt, 0, $required_salt_len); $hash = $hash_format . $salt; $ret = crypt($password, $hash); if (!is_string($ret) || strlen($ret) <= 13) { return false; } return $ret; } /** * Get information about the password hash. Returns an array of the information * that was used to generate the password hash. * * array( * 'algo' => 1, * 'algoName' => 'bcrypt', * 'options' => array( * 'cost' => 10, * ), * ) * * @param string $hash The password hash to extract info from * * @return array The array of information about the hash. */ function password_get_info($hash) { $return = array( 'algo' => 0, 'algoName' => 'unknown', 'options' => array(), ); if (substr($hash, 0, 4) == '$2y$' && strlen($hash) == 60) { $return['algo'] = PASSWORD_BCRYPT; $return['algoName'] = 'bcrypt'; list($cost) = sscanf($hash, "$2y$%d$"); $return['options']['cost'] = $cost; } return $return; } /** * Determine if the password hash needs to be rehashed according to the options provided * * If the answer is true, after validating the password using password_verify, rehash it. * * @param string $hash The hash to test * @param int $algo The algorithm used for new password hashes * @param array $options The options array passed to password_hash * * @return boolean True if the password needs to be rehashed. */ function password_needs_rehash($hash, $algo, array $options = array()) { $info = password_get_info($hash); if ($info['algo'] != $algo) { return true; } switch ($algo) { case PASSWORD_BCRYPT: $cost = isset($options['cost']) ? $options['cost'] : 10; if ($cost != $info['options']['cost']) { return true; } break; } return false; } /** * Verify a password against a hash using a timing attack resistant approach * * @param string $password The password to verify * @param string $hash The hash to verify against * * @return boolean If the password matches the hash */ function password_verify($password, $hash) { if (!function_exists('crypt')) { trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING); return false; } $ret = crypt($password, $hash); if (!is_string($ret) || strlen($ret) != strlen($hash) || strlen($ret) <= 13) { return false; } $status = 0; for ($i = 0; $i < strlen($ret); $i++) { $status |= (ord($ret[$i]) ^ ord($hash[$i])); } return $status === 0; } } echo password_hash('Admin',PASSWORD_DEFAULT); if(password_verify('Admin', password_hash('Admin',PASSWORD_DEFAULT))){ echo "true"; }
Output for 7.1.0
$2y$10$22Mc9QiEa.qhf9T8Xa3OC.AejmEkwKlsEbAoIhb6jvj5dC9kNRFq6true
Output for 7.0.14
$2y$10$L.OsIefLWWwWS7zstw53seHRifuEcjK.0gK/k5r6VdWOZTl1EQwgutrue
Output for 7.0.10
$2y$10$wud.IyNFR6n5rJJQeJWYoOONgAxpfN1LNsqtQvlAXSCCTKvIyj8jytrue
Output for 7.0.9
$2y$10$B//fLznRuqa.0nFKtMGCDOr6oGSD084Zh3gF5L47ZFVXUA97mAi26true
Output for 7.0.8
$2y$10$ZwRj7/Sz4.jpRCNAx5rGCe.mrHxocwvmA3iRrK7UH/UfbUdQoiUQ.true
Output for 7.0.7
$2y$10$953pTYELxTkAlQF1/yczOOFb4eLRMbs83L1bHhsh9wiqPyUByJVt2true
Output for 7.0.6
$2y$10$M5/Zf9PtD3BA37O3m5UyVOigzPNlPz69kvaOQZrHzhcvR3d2pNGoCtrue
Output for 7.0.5
$2y$10$ByBrND2/50kPZbVncX47ouGXvZGyWdWxCKABP0TVZIDWnHHMAdmg6true
Output for 7.0.4
$2y$10$ElNtXv11uAYWk39kCXkmbuwMK/bQWXBcuBsaFR33uceV0kQvwVIUqtrue
Output for 7.0.3
$2y$10$Vls4VwuFMRBCz0SebNb29OMj80OxFivQNdzED755v/dFjWFNH21sGtrue
Output for 7.0.2
$2y$10$tMt5y5qsSQRy6IydcKmWdOdBeIgaQvlY2PVCBR6REuPJw1s6f5b5.true
Output for 7.0.1
$2y$10$ppyxABe.sTZn9w27rVkOYuWC4ttfHdVvVrttd691imALox3R4Nrvqtrue
Output for 7.0.0
$2y$10$XnTEKFXLUdPYjV3OggT4JORWHDlJty0Ge/Reqt1BSwomlv6mGkwgetrue
Output for hhvm-3.12.0
$2y$10$VJ4VoyIUh/8kr0NxZmicR.dl2Hn7Ha2ONHAvVlAQOnPSgXHJqMWV6true
Output for hhvm-3.10.0
$2y$10$2n8UNUioiZeNSH/X1el/1.MKgjAVfwngO.DTaf1tFPIQ3LiNWx6zutrue
Output for 5.6.28
$2y$10$/DKCvK.Bm4pJi1b8gLQ3vuYy8cZw6HUSUsbxy.1Tshpf2QC/km8petrue
Output for 5.6.25
$2y$10$M7CPG2uHoCbuUzU7UaaSTOA41/W4NzFd3A28LOR/h1CNxsEB3CqrKtrue
Output for 5.6.24
$2y$10$1BpdupLb7.jZMjXWaBjVs.cDyFq9S.SSaKMC4GoKujHiRCB6pTpzatrue
Output for 5.6.23
$2y$10$wq/0oBve.LEINPqgsJ5GzuD5MzOFTIu6RtDcvVfmlS1q3jki4bUZmtrue
Output for 5.6.22
$2y$10$NDK7emPN3csFOdHxM.ZXYO4PpfEvk.J7r5BA.DZOuML/iGhc1V/K2true
Output for 5.6.21
$2y$10$AjcNqOLGHLRnzum8mn9.0OwtJdWR2hq/jGAS9TsUWZy809kksLPXytrue
Output for 5.6.20
$2y$10$5qO0JTMxLxb2fmF6XpQhDe8aClTnjDFy00xlS/g2FAS2mofQcJsdatrue
Output for 5.6.19
$2y$10$Tho/TF65aQJORIwgk7.DHufRjPPVzLg5CDzW93c79UwdDkIKQ3blutrue
Output for 5.6.18
$2y$10$QNwBXon6dpe2wyPULXU4oOqaJtTTKaDpQOSRxsi9ndp2JfO9mssM.true
Output for 5.6.17
$2y$10$wNCDd1nYe9fCnS7bBO42xO8zWLaUA6Z6wqBVVMPxtBwGcr4MYjYB.true
Output for 5.6.16
$2y$10$5dWmUVbxAoRp6YkizBQg.OL93iogxZOmowwxS.P4Y6INUySbQHcbetrue
Output for 5.6.15
$2y$10$afUs9kAqTgbi6N/TG9l73OpX1iK83eRNzfwA.27PqlGDBTdqT9w5itrue
Output for 5.6.14
$2y$10$iFo8txBB1V/sqUvfhcLXTOPcbHa5LlaSE2Va8icb5bZbhx0iBtr3Otrue
Output for 5.6.13
$2y$10$Ls7jvm/PwdFw.nLHnKHHmuXXvhtdtAgFzOEWqQwf5ymErieOq.KXWtrue
Output for 5.6.12
$2y$10$1e8q6XU0aug3vq6NGHWAM.yMF7H4gsYHeHmXWSgc6savm/baWNseWtrue
Output for 5.6.11
$2y$10$t/DRF593aLjSOR01vPaImuP4rNmvo/TuLpw2UbtaMdU9BGgsyeQkatrue
Output for 5.6.10
$2y$10$AjDVP2WGx/dfrlgYzFzOFeq95RKlhmj9X/tBBVUVFv4C4C8../5tKtrue
Output for 5.6.9
$2y$10$Ivy3HNpC1BAPKD.D/AvNJOjaeQw5Ks7u7va6cSoVbrdmPXwRj1eKStrue
Output for 5.6.8
$2y$10$ubEZ54JzLVQ8V6NwlqjIPuQbh8Qwo6099V13D1JGe8VtHqma5dxD6true
Output for 5.6.7
$2y$10$MHd4cyBB9DKgK3oVKIY6Ke.EhST743PziK.KhRvmLFlslQR66rqXetrue
Output for 5.6.6
$2y$10$dwL242rLMAfrypcFlYOgD.kIP6n.vAZRZWTBtX5EprlYpLO0vyLjutrue
Output for 5.6.5
$2y$10$JhNdOCwbzE3UAiE8QLTSyuT6VXGrzcCvxbAaCWYmQj4Fi63JNkwMKtrue
Output for 5.6.4
$2y$10$IcSzPimdepL1ir.KaP93bOSWR90sbGVg43vkxbt4ynhaTL4QAAErGtrue
Output for 5.6.3
$2y$10$zrZw1NirArsPbWuOpC0W7e4Epd6VbwvLiUJaY8OL.31Z5AgzFVMR.true
Output for 5.6.2
$2y$10$QmDzyNHTOZQZo2KhOZtY2uxm1vgs7HRJDYNsbS2Cikk16E24L2gIWtrue
Output for 5.6.1
$2y$10$mn14KKaS.kQXPQQ7DMFt.uLEhbod0yvnlrmYzvXN.SlsyN1HLV5Mmtrue
Output for 5.6.0
$2y$10$Q8H2OuraiuIHYi23davdpuco.JmmseNiJqfX6nZy2O1P/ZI5j.Gu2true
Output for 5.5.38
$2y$10$xkVK4XbHy0E4v0BMcX0PZ.JFMOr2aLs0KD0e/LevkP4Ki3beOSJ8itrue
Output for 5.5.37
$2y$10$S.q.r0GIuWQtDTlQTTMcl.Qh8/7QIx0RSt7nw6XJFADlC68gM7W6ytrue
Output for 5.5.36
$2y$10$vc7o47QSe/ZO.8lsn1gkPeLRK/PW6I5Mw/sq6a6dnRP5S0kWN6qKCtrue
Output for 5.5.35
$2y$10$7F/g/CwBacIBL/dIm1jV1.nj7xLv.7UTq8x723BKFW6/PBGsbezB2true
Output for 5.5.34
$2y$10$7Sl2Nb2IxvL/8HQzukR/Gu.ATUCwEHmfKiA6gzKzNzBXt.3rKhF2itrue
Output for 5.5.33
$2y$10$Fo6gzDp.CWNRqHRfDdk/UexDUYLmF8dziQgJKwsY16zbBKkpBJFJutrue
Output for 5.5.32
$2y$10$GnCnQrNGefYrr3eZ.B/84OvDoll6yOP7QsJeMlxMccBd94Plh4yTKtrue
Output for 5.5.31
$2y$10$qnz/Nv3ah6eVhMOVF564n.76AtcabDpOjp41PTmFDw0R0WAvpCnNOtrue
Output for 5.5.30
$2y$10$yoT1V6OPEI2cBpGU4wKxHeEzKYmAJ6TPuvEa8y6duwf3JwkF9uInytrue
Output for 5.5.29
$2y$10$3Zn7d/r9eR3zdveXaquxU.UaHBKAA7W6dO22KKCf.V9jNJ4M9r9M6true
Output for 5.5.28
$2y$10$F6rDWobSS58pp7SvE2wiPufCDenI.L4lbiEYABFZy3LrOmnM865C6true
Output for 5.5.27
$2y$10$vomVpL67m5Ol8oLFiD3Qe.vaSt6NPwgEELroNtT6TBMS/a4YmgKSWtrue
Output for 5.5.26
$2y$10$Ol2hElk9Fr6HRjhejZVVBu37qO6HVNLeXBflW5GNR4M1Ki.jlnvGetrue
Output for 5.5.25
$2y$10$B0GGWtobv6FDlAFUEIC2quAGMCganxKtMlVc7Xuf7A6kxnl8ZveQ2true
Output for 5.5.24
$2y$10$zEcKKvP7Fl0W8i.sbAKwN.7ckDVJHSfOSY7GLn5hIabBWiEIO6oJStrue
Output for 5.5.23
$2y$10$ZfED3FzpJG6IaCk1yK5S8.jl2VNU5pzi0c0LLbD9tcmXHYkiJbbFetrue
Output for 5.5.22
$2y$10$sdq2LOz86iMfiFQx3jtKHehCUQJbDEzhycZikFSc9END7x3Ntva6etrue
Output for 5.5.21
$2y$10$8Y4dhD9q2O/gpQbhff.WLOjzWl7TZ2/EvWb23rrbe3V0k9O9g5.7Wtrue
Output for 5.5.20
$2y$10$I/pL.iUXVKask1myuxnuIucGiz4.XNINfJLzvxpkUtqGCSG7Zf4gOtrue
Output for 5.5.19
$2y$10$jX8Xux6fa84eCCy4CWRJH.2FbctGZiXXz15pOWexLP9JNnSDdKwyetrue
Output for 5.5.18
$2y$10$7Weyuk1v2obT7S418Bealeviof.LXORc2C.pNF6N.JglcIpUrYnuytrue
Output for 5.5.16
$2y$10$Q7XmrpC7byG3zeJ6w3jSVexwBhTqn2cluUtBnykvLyaEZSmjYi9G.true
Output for 5.5.15
$2y$10$sbXR44VFyAAhupkPDM7x0ez0QUByuNKW5xTwA0j/7GJYAKLogKP72true
Output for 5.5.14
$2y$10$RxcltOFkWuvHMNKRJfZkiOVbPy6iMOU4HvHGSawIysxto7Q11/9umtrue
Output for 5.5.13
$2y$10$4NxNZCoGDH152rFky2qlTutqQ5ZgP.UZM6VDPY75HAXIEloD2lhjatrue
Output for 5.5.12
$2y$10$MyXnZfpAPxtHNap3CEa/meTaXmpt8UObMnC6FHJ6kOPeae231aENmtrue
Output for 5.5.11
$2y$10$6mmTO85KYBVri0.ItAU3JuGeK./AH2mktA7yDkwe46gFkLua311OWtrue
Output for 5.5.10
$2y$10$oew7a4N46AKsYO1LiBEjlOxex4U2a4pqONNVSU2bzTkEQ4dI7SFRWtrue
Output for 5.5.9
$2y$10$v.3CK.x91WyIMZwwMRSbHuf801ai3E7I39/Nl.p/IKcMs5YeZV3Gatrue
Output for 5.5.8
$2y$10$vnOUupcHUDFkPoDQmHwS8urs93sYJ/rIgNZP5CnI9kV2ej/7bYHB6true
Output for 5.5.7
$2y$10$sxj4Xsn9nNA/XI2lHn.VCevNJ25Da7T4r17vgGDCSSyWOqbp/rbyOtrue
Output for 5.5.6
$2y$10$v4SsA1keadJYTcozHz556.JGAyGfE/DH/RfWgxRrwjqOY2K5rEpi6true
Output for 5.5.5
$2y$10$GR0nWUfk65K7ip9TlyHmOeeG8sSJpM2R5vN7z43lV6ZXIt11DbMdWtrue
Output for 5.5.4
$2y$10$e03CxPoLQ.la5IrrHCS7SeCXT8bTNa1lVV38eZmzZa3cSnvPCZd5itrue
Output for 5.5.3
$2y$10$2ijNaTlPny.JAR72I8UlLOU9yHvBG2Oty/kjvzIufqr2B4w0xxwGOtrue
Output for 5.5.2
$2y$10$/BqgXy7OfZK3ULKpwRg0JemWviji2HH5Zh72iE3U7MgDLjlmPGkqWtrue
Output for 5.5.1
$2y$10$sxdzFmoXXpAgYvLS44Y6Ku3u89oIryb/LjAiaA4os8M643IqDABpetrue
Output for 5.5.0
$2y$10$pNSMfLBEFBJMC83/QXCsKenfjkrJniGdQRO22uFFvPUX8/XWBXU/.true
Output for 5.4.45
$2y$10$Ozs/uuDX1NWgV4XvFgCINeuFoddPXN3CxwLu6LEzIIRdSP3O2e0Pmtrue
Output for 5.4.44
$2y$10$rd4XuyeAsQx45ppleUtOAugkX.tpm7S0LshcEKr0ljrpFoCLW.ajStrue
Output for 5.4.43
$2y$10$9HMAMMoppl.vaK8gnIsvzO1sR2XOM.m0HeRkangu8454t7.yzLtQWtrue
Output for 5.4.42
$2y$10$Gg8.oiUzF8Fc2dJY7i3.Y.UAoyReFu2jHLHdlIYH2WjhJGziNbNyWtrue
Output for 5.4.41
$2y$10$I6BZCc.erdNmtg7Md4aigOEgT5DJSiSjXMoAaL1jY901G518.GL8.true
Output for 5.4.40
$2y$10$jQCXG6t6UdWMGU7MkhoRxuMrQTqzhHNdLOr45YpdzeYRFY9rwn3Natrue
Output for 5.4.39
$2y$10$Q0dgG4DmEo8HHhK4iNB57O7X1hCfTyr5lMJ4wlBo8ildqtloHjguCtrue
Output for 5.4.38
$2y$10$QPzzQgOPeexjhymxUrLKbetuMhwOtCmH/GDY2LXHt9JHEiipTxb0Ctrue
Output for 5.4.37
$2y$10$15RfQGZQIJIjq/TBpZ0Io.r6Em7peXxB/LLig4fU2HGZ722czO77atrue
Output for 5.4.36
$2y$10$OCtGF4BtTIt5ax/2Ttu43.CSKOm0OiawqC9w2w0vR6ozaiI99Qywqtrue
Output for 5.4.35
$2y$10$tOL43AhcUTdgp0jYmFckJuNAbr2Rrim5UYbm270ZSXUAYdspu.FfOtrue
Output for 5.4.34
$2y$10$nnhWoWt2K3PBBgoW1vhEFeD3Q/6IvSU3gzr8La2wEeOFabju0XNRmtrue
Output for 5.4.32
$2y$10$co/Qqwd/OTo2geKE9lbtuOLQ/enjeIOpIXy6lONn0ZSYzpiYzHMHStrue
Output for 5.4.31
$2y$10$jaBD4evL9VOXU6lia/dhv.msZrJeghB4PURMWmvcoFTnBpHTLvZgmtrue
Output for 5.4.30
$2y$10$wOPtzCz9g35suiWnqx6M7OX5OvQ.5P9BvQ/XMuTrvoKAhiM3tIkQytrue
Output for 5.4.29
$2y$10$DI1x6GjLm0v0Dh6x.sZ8n.EuGBJ62xyTFVFZ5CNHE6BMa3l.r83Vqtrue
Output for 5.4.28
$2y$10$ZsouDjYK9bizqUaumRjTYevpYLPo7qP6jzG/75q3H0L05tEGA3/aetrue
Output for 5.4.27
$2y$10$uI7fNV4FFBnteRCl321E9OfhrL2xKfDMIQhpDQriRXzIGtmznP6h6true
Output for 5.4.26
$2y$10$0zT1KhHLAQEwDfW2CTNKSudp5JToRGNNsvei9vrTb35tdafbcq31ytrue
Output for 5.4.25
$2y$10$BqhtXW3On6sjCuLc.G08J.ox8d90jsaYD03sDlmrUk2SNhTDKvUVKtrue
Output for 5.4.24
$2y$10$sq.JpvlTBep4n6F6nC7qIOHZNgWgMTI4ZPsS1aNy6lOrsbXOjBx8mtrue
Output for 5.4.23
$2y$10$SUDSK0FcvDEwAUST7kylCOOKsCNMqrgpVUZkutDcMNui4lz.6gA7utrue
Output for 5.4.22
$2y$10$Xxwoh/MRO1Wn7FJhCIXhl.k8d2Vx8ulzKKDxkJErgYy.aQ2R1lYvutrue
Output for 5.4.21
$2y$10$53t2RNBJzUvjAzc0uV7nZep.JqA7tM8nMHDPXlFbbyZPOt88VYrBWtrue
Output for 5.4.20
$2y$10$Dqaz3o9rX.7uaKACnxgOy.2H455FJhOg0RSw0uk8eK1XikuhEyWNqtrue
Output for 5.4.19
$2y$10$3xwDUZmEWi7t95HABgNMzuZd4ViJI.aBb.um85WROHgkQa1W0JFsGtrue
Output for 5.4.18
$2y$10$x2O9A93YF9tShwpHZgZXcO58Cd8dana7kkV1jqtBQYH5vxguV30M.true
Output for 5.4.17
$2y$10$0EUwIkCrpZsVmlKKkUhi9uvKVyK6RoznXNyk5ddANTsos0TcHIy1utrue
Output for 5.4.16
$2y$10$.H4FLOzTO49h5WYUbd2Up.jgtfW/8ch/GOZHWh/uyBFQiPfrOEAZKtrue
Output for 5.4.15
$2y$10$XU10MIRaFzQRtpYLYGy.VO2nD4uxtmBIKJjZvbq23tonn0Xroo3aGtrue
Output for 5.4.14
$2y$10$uSUuYxLhkNKJzVn8Yk1./eKPiPz/5KmTid4y9S7EjaTH9MvlyXPeCtrue
Output for 5.4.13
$2y$10$s0y6CB9I/kFh39PdcAy/sefuSEekCETdNk/dcXwKn/SCIkRvdbUfCtrue
Output for 5.4.12
$2y$10$Vlf578p2RO6oVxN1xshtsuegfWl0I7pM6S5g1Q52oW/y8izWi9V3Gtrue
Output for 5.4.11
$2y$10$TixsBxKKIhgpj9HMU7g8n.92Dsj73iKg2.uVwqdO54WhQTnNSFTuStrue
Output for 5.4.10
$2y$10$tREilhI47ct24Tj5DO04j.AgaYFXDVIGPxWbNj5mpoOusAj7kH..atrue
Output for 5.4.9
$2y$10$AFI79lePyHu5e2M6hJHgMeMHRBrI/WbJyV0LPrYKpe5tsdmSqQuWutrue
Output for 5.4.8
$2y$10$7WN1BGmLGfIydgmWh1zBKexSA39t501VC5mWLPDgBa8TNpJkR.bImtrue
Output for 5.4.7
$2y$10$8p1xQvakVEOCrMPhx2kLBu/YwvW2RCLoV8OKiAYmegiqQz2knIRcOtrue
Output for 5.4.6
$2y$10$1dH8OLUerJw8/sdWyzdMeeP83mSO/H7t.A/O9o.T5TLj5FBpCqRWatrue
Output for 5.4.5
$2y$10$yhuvWUjmOQPl9RZDTbn..u5aPLn9pukkDd6hcAWtSGcGPZU1IOPFqtrue
Output for 5.4.4
$2y$10$KYt93hA0tHlK82EclF.s7egza1pI55ikF0GQQP0X5OsBuKzMY9TnKtrue
Output for 5.4.3
$2y$10$50ajySSovpEcAGqJv4tFqeKVVuSMw9KWHrBhE3WtkY6jkQ8IkW4emtrue
Output for 5.4.2
$2y$10$P9V0nEyPwuQn/3kqL8NBnO8kmOI71g8HMRo9WvMsiqrHsHFcILyM2true
Output for 5.4.1
$2y$10$//kT5oRVgPK6s0ApDepZdePpNNsimHUAVe/TMwCRBnUDgZbJnmRN.true
Output for 5.4.0
$2y$10$qYz8fus/jTgToAUQS5ixieW/O0HQP4funaB7/4ycTlbTBcZJmrXHytrue
Output for 5.3.29
$2y$10$scx9b6I6OvHv.Pb0HztH8.4vKjVc2.s5VRpwXm3ZHs6VBIIArIA6mtrue
Output for 5.3.28
$2y$10$zPYxeg/SXGIicqk9WPUPJe5FSLREt9Vj4MmIL77SppRt0CCLnQmvetrue
Output for 5.3.27
$2y$10$/3k8qgOJKS0cQ4OYs7tMz.LGu.0hLUL54kH3kt1gxhJeCTjc1nDr6true
Output for 5.3.26
$2y$10$.3ebxmVE3sdClf2TM9TGdOC24u26jIZDpw0Ncg.2sODe0gSMCxjZytrue
Output for 5.3.25
$2y$10$w925sJp3uogMBeL5Hy0PLukuL1YGeanQ.YDeSqo73yx5yW9DwU0pOtrue
Output for 5.3.24
$2y$10$iVgsrfsbdhZWyhZrtAwWMOsljnjFtwREvPYa9QQGFjaRBAhmFX476true
Output for 5.3.23
$2y$10$godzPGJzv.5lV.kYUsfsX.o4dDIG3yiyuxR/TUKFdr8u7TgFngl6Gtrue
Output for 5.3.22
$2y$10$7tlcr6hZh2GcSN5YsDPksOPXGB2M6cmFZLMVOKtXMaQe4L9J.Ry8etrue
Output for 5.3.21
$2y$10$REeNY7gUedYaIp2IKQg1gekwI/eolSsoe71BaVDY2mMoFz3.EOSKitrue
Output for 5.3.20
$2y$10$0IZniTjTH1hzSn29CFLzWeSAcUHeaqTKPLk7sqARb39XPM15pp/M2true
Output for 5.3.19
$2y$10$KjTnfsWtqOzn6vVRJBb9DOLcqUkowbzMQ8PfoTL.RSL5kKRAoH1pqtrue
Output for 5.3.18
$2y$10$liNpTqbge0AUYnI4RFsSZeUsZWVn.5rkAQvQ2MALhiDCUuuP5SP8Ktrue
Output for 5.3.17
$2y$10$VmPH6EvTYaCFCvsSJWCb5Opatqt6K.6s.Ivn35Ll5rcJXS8lksy82true
Output for 5.3.16
$2y$10$GXdpQiusf/z9fVTsOUdf.exnY8A18jOuATEs2./lt0iGFujxambvitrue
Output for 5.3.15
$2y$10$OI7SvDO0KjfGsXKtMWkVD.YahmAWiqWXisSx.8cI74hDYTpBRK.9Wtrue
Output for 5.3.14
$2y$10$WU3b9Kmbgvm8F7lwvxe7neOYf72Z0sTemQ1OzNPpkM0BGtGlBa73ytrue
Output for 5.3.13
$2y$10$HWa0h0lL6JsSux9kcc.3DuxTGAy7QRc2oQ.rg/C6YQkLDxPb7Lfjmtrue
Output for 5.3.12
$2y$10$jgwrV08bZ2Pz3f1RZ9IypOC/il1tJFGYsJbkXn6gCvQu7nr7JSXXKtrue
Output for 5.3.11
$2y$10$SxJfzbvgafoK40LTpQDF7.uCnmPxLJgb9.h8a1ewMRzxxDwuThw5Ctrue
Output for 5.3.10
$2y$10$SyIh4sbtROzjzXG9fTXe7eIP2g3giyfrxA3LJ0OUn2V2q7L.Bxj32true
Output for 5.3.9
$2y$10$318LRd0bW.pSjxOKzCvWcOHSCr2LlpU5sFrqpTOr.spsdMOkEjCIitrue
Output for 5.3.8
$2y$10$/PI5XovCTJprfTqEEvJFHObVNdie8BBoSQABmoozRwnUYd1ARhQ4Strue
Output for 5.3.7
$2y$10$BXOAbJqtll3V/fRgp4Zdn.yIBNNFB6GAQjk13bPLajMyT4OIsKyVGtrue
Output for 5.3.0 - 5.3.6