<?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.2.0
- $2y$10$9KML4zIdUnaKyHw4tnTHSuWNdGmq3AWEHvsYROyO/mwT5suSvLN0.true
- Output for 7.1.7
- $2y$10$.1WxZref49gRmiRvYmJRbecIVJMiRQM96rxSWALYGGERTxRgBGJ4qtrue
- Output for 7.1.6
- $2y$10$oQdqJs8DRsav1mEObcw/XetYfiJSTypjpFq7auxSBrNo2PLEOezPCtrue
- Output for 7.1.5
- $2y$10$jbSPyipgjJWtH13ByLu05u2oZ0gIFOZR7WUPTCk4W6URWFDVMK/Dutrue
- Output for 7.1.0
- $2y$10$22Mc9QiEa.qhf9T8Xa3OC.AejmEkwKlsEbAoIhb6jvj5dC9kNRFq6true
- Output for 7.0.20
- $2y$10$9fSKkMQ.UzeLUIScLFSWsuWIsPL/gEVX1yQ1RawC6otRgOqq3FJE2true
- 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 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
preferences:
125.57 ms | 401 KiB | 163 Q