3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php # # Portable PHP password hashing framework. # # Version 0.3 / genuine. # # Written by Solar Designer <solar at openwall.com> in 2004-2006 and placed in # the public domain. Revised in subsequent years, still public domain. # # There's absolutely no warranty. # # The homepage URL for this framework is: # # http://www.openwall.com/phpass/ # # Please be sure to update the Version line if you edit this file in any way. # It is suggested that you leave the main version number intact, but indicate # your project name (after the slash) and add your own revision information. # # Please do not change the "private" password hashing method implemented in # here, thereby making your hashes incompatible. However, if you must, please # change the hash type identifier (the "$P$") to something different. # # Obviously, since this code is in the public domain, the above are not # requirements (there can be none), but merely suggestions. # class PasswordHash { var $itoa64; var $iteration_count_log2; var $portable_hashes; var $random_state; function PasswordHash($iteration_count_log2, $portable_hashes) { $this->itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31) $iteration_count_log2 = 8; $this->iteration_count_log2 = $iteration_count_log2; $this->portable_hashes = $portable_hashes; $this->random_state = microtime(); if (function_exists('getmypid')) $this->random_state .= getmypid(); } function get_random_bytes($count) { $output = ''; if (is_readable('/dev/urandom') && ($fh = @fopen('/dev/urandom', 'rb'))) { $output = fread($fh, $count); fclose($fh); } if (strlen($output) < $count) { $output = ''; for ($i = 0; $i < $count; $i += 16) { $this->random_state = md5(microtime() . $this->random_state); $output .= pack('H*', md5($this->random_state)); } $output = substr($output, 0, $count); } return $output; } function encode64($input, $count) { $output = ''; $i = 0; do { $value = ord($input[$i++]); $output .= $this->itoa64[$value & 0x3f]; if ($i < $count) $value |= ord($input[$i]) << 8; $output .= $this->itoa64[($value >> 6) & 0x3f]; if ($i++ >= $count) break; if ($i < $count) $value |= ord($input[$i]) << 16; $output .= $this->itoa64[($value >> 12) & 0x3f]; if ($i++ >= $count) break; $output .= $this->itoa64[($value >> 18) & 0x3f]; } while ($i < $count); return $output; } function gensalt_private($input) { $output = '$P$'; $output .= $this->itoa64[min($this->iteration_count_log2 + ((PHP_VERSION >= '5') ? 5 : 3), 30)]; $output .= $this->encode64($input, 6); return $output; } function crypt_private($password, $setting) { $output = '*0'; if (substr($setting, 0, 2) == $output) $output = '*1'; $id = substr($setting, 0, 3); # We use "$P$", phpBB3 uses "$H$" for the same thing if ($id != '$P$' && $id != '$H$') return $output; $count_log2 = strpos($this->itoa64, $setting[3]); if ($count_log2 < 7 || $count_log2 > 30) return $output; $count = 1 << $count_log2; $salt = substr($setting, 4, 8); if (strlen($salt) != 8) return $output; # We're kind of forced to use MD5 here since it's the only # cryptographic primitive available in all versions of PHP # currently in use. To implement our own low-level crypto # in PHP would result in much worse performance and # consequently in lower iteration counts and hashes that are # quicker to crack (by non-PHP code). if (PHP_VERSION >= '5') { $hash = md5($salt . $password, TRUE); do { $hash = md5($hash . $password, TRUE); } while (--$count); } else { $hash = pack('H*', md5($salt . $password)); do { $hash = pack('H*', md5($hash . $password)); } while (--$count); } $output = substr($setting, 0, 12); $output .= $this->encode64($hash, 16); return $output; } function gensalt_extended($input) { $count_log2 = min($this->iteration_count_log2 + 8, 24); # This should be odd to not reveal weak DES keys, and the # maximum valid value is (2**24 - 1) which is odd anyway. $count = (1 << $count_log2) - 1; $output = '_'; $output .= $this->itoa64[$count & 0x3f]; $output .= $this->itoa64[($count >> 6) & 0x3f]; $output .= $this->itoa64[($count >> 12) & 0x3f]; $output .= $this->itoa64[($count >> 18) & 0x3f]; $output .= $this->encode64($input, 3); return $output; } function gensalt_blowfish($input) { # This one needs to use a different order of characters and a # different encoding scheme from the one in encode64() above. # We care because the last character in our encoded string will # only represent 2 bits. While two known implementations of # bcrypt will happily accept and correct a salt string which # has the 4 unused bits set to non-zero, we do not want to take # chances and we also do not want to waste an additional byte # of entropy. $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $output = '$2a$'; $output .= chr(ord('0') + $this->iteration_count_log2 / 10); $output .= chr(ord('0') + $this->iteration_count_log2 % 10); $output .= '$'; $i = 0; do { $c1 = ord($input[$i++]); $output .= $itoa64[$c1 >> 2]; $c1 = ($c1 & 0x03) << 4; if ($i >= 16) { $output .= $itoa64[$c1]; break; } $c2 = ord($input[$i++]); $c1 |= $c2 >> 4; $output .= $itoa64[$c1]; $c1 = ($c2 & 0x0f) << 2; $c2 = ord($input[$i++]); $c1 |= $c2 >> 6; $output .= $itoa64[$c1]; $output .= $itoa64[$c2 & 0x3f]; } while (1); return $output; } function HashPassword($password) { $random = ''; if (CRYPT_BLOWFISH == 1 && !$this->portable_hashes) { $random = $this->get_random_bytes(16); $hash = crypt($password, $this->gensalt_blowfish($random)); if (strlen($hash) == 60) return $hash; } if (CRYPT_EXT_DES == 1 && !$this->portable_hashes) { if (strlen($random) < 3) $random = $this->get_random_bytes(3); $hash = crypt($password, $this->gensalt_extended($random)); if (strlen($hash) == 20) return $hash; } if (strlen($random) < 6) $random = $this->get_random_bytes(6); $hash = $this->crypt_private($password, $this->gensalt_private($random)); if (strlen($hash) == 34) return $hash; # Returning '*' on error is safe here, but would _not_ be safe # in a crypt(3)-like function used _both_ for generating new # hashes and for validating passwords against existing hashes. return '*'; } function CheckPassword($password, $stored_hash) { $hash = $this->crypt_private($password, $stored_hash); if ($hash[0] == '*') $hash = crypt($password, $stored_hash); return $hash == $stored_hash; } } $ok = 0; # Try to use stronger but system-specific hashes, with a possible fallback to # the weaker portable hashes. $t_hasher = new PasswordHash(8, FALSE); $correct = 'test12345'; $hash = $t_hasher->HashPassword($correct); print 'Hash: ' . $hash . "\n"; $check = $t_hasher->CheckPassword($correct, $hash); if ($check) $ok++; print "Check correct: '" . $check . "' (should be '1')\n"; ?>
Output for 7.1.0
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$wbzVwaxZ7ZYWrKdYzqM0WOk7SWiH62w22YaB8KXuiutVC0tdhkUJS Check correct: '1' (should be '1')
Output for 7.0.14
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$SQT0JlFrYvelib5W0lCeXe9pq43O/Jjo5TiuWXrNZ/fT6PdiUmzLK Check correct: '1' (should be '1')
Output for 7.0.10
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$mkwqPwXwxqim9U/Auq1JW.5altBQnehoCmPxLRIG5aiMDWqz3nmxi Check correct: '1' (should be '1')
Output for 7.0.9
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$RHNjxf1oDNiT.H/UdlvyvOPj6Fd4TQTxQcjqSbw1JLPA6jPIy2mtK Check correct: '1' (should be '1')
Output for 7.0.8
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$VDMx8EfM7cyqm6UVgzaojul4/eRpA5HNNBaby77y63cDYvlOO8ida Check correct: '1' (should be '1')
Output for 7.0.7
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$dVFXpcjHJXMvj/qxXrvjoO2xMX7SKI2qjQzvND2PBiuWNOjRuWuJa Check correct: '1' (should be '1')
Output for 7.0.6
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$MzVXE34HsiQo7U5Gdd/dmeah/1tiWut0PKudg6xs6o6oe5pzVUpjO Check correct: '1' (should be '1')
Output for 7.0.5
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$Mc54NmIE.VaYlkhrNkxKZ.vGPt5rfEJ5e55kbZXI4hUkoTy/0UtbW Check correct: '1' (should be '1')
Output for 7.0.4
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$SdVvURkFuM3Q46JHOaFPjOFtV0MvNQt6SOWLAOG2k4PFpC6ropea2 Check correct: '1' (should be '1')
Output for 7.0.3
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$rGgTmO1AVOTLpJg7p2eILO.SBxJ0GNe2X6RgerBZBTRGmbbBLU97S Check correct: '1' (should be '1')
Output for 7.0.2
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$xwPh0K3RF80whtZnW4wEUO2S.72/8AeK4wsYdumY71LFFtql3wKLu Check correct: '1' (should be '1')
Output for 7.0.1
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$kcrcrstMg60gwFZh3uRhfO4FGv91OrlH1SQgQw52p7xwNllEMRGku Check correct: '1' (should be '1')
Output for 7.0.0
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /in/Wpbr3 on line 27 Hash: $2a$08$m4SJpWC2PY.7wAlxKcZlG.ttAQAv5OIf.UJSYlg24XoiUwju8WWGW Check correct: '1' (should be '1')
Output for hhvm-3.12.0
Hash: $2a$08$Ey6h8RdSQo2iTHS/3mJsEutCi5yz1.2gAEAdVnGlU8G2vq8V.jDyO Check correct: '1' (should be '1')
Output for hhvm-3.10.0
Hash: $2a$08$sY8v2ZHZAwvC8/CjsU79jOZXrpIST4NP3oUatdbXEAtr2zyE03Yji Check correct: '1' (should be '1')
Output for 5.6.28
Hash: $2a$08$x5w1CLp9LC.sj.622AgSZeiwqbmp3u/4XyTOW8X5e1uEv9Dyd475W Check correct: '1' (should be '1')
Output for 5.6.25
Hash: $2a$08$E5eoUJVSVvKLgqiriBhgSeRJDKF.DdIPRngVXql/yYj/hXaqzyxH6 Check correct: '1' (should be '1')
Output for 5.6.24
Hash: $2a$08$OMi/JFymFsF5HbE3Mtj/8.jiCp0c3OmqvIkBA4ZIv3j5k5PRSOO6a Check correct: '1' (should be '1')
Output for 5.6.23
Hash: $2a$08$3dTjq/684ra3GvEcXzsSXe6Bb30qK/Zx7ukceJzGR19s.Z1cWywvK Check correct: '1' (should be '1')
Output for 5.6.22
Hash: $2a$08$.2nBrX9/RcUiHv8dOao2r.WsIURJsKw9x0lwNAbi0TU60uHZ8BrHi Check correct: '1' (should be '1')
Output for 5.6.21
Hash: $2a$08$pLTDg9mx6fPxRJ4bQqkqqe0HF97X92Z4j1qJFoCT9Z5Gm47KGR1.i Check correct: '1' (should be '1')
Output for 5.6.20
Hash: $2a$08$iTDP6BsBW2zmPOfMR34Fz.ntXN61ycM7iODkmVymSlNA3TaZisOTO Check correct: '1' (should be '1')
Output for 5.6.19
Hash: $2a$08$.oq1pLVVNiIAZgbvixVaE.bkpi1qgZdGYJ1U1f.8c1HTB7eLavrsW Check correct: '1' (should be '1')
Output for 5.6.18
Hash: $2a$08$d.T4SJuNT6PUtT8SHtFaXeFX8iMnu1uVoGrqv/AicjsmMWDH5nNea Check correct: '1' (should be '1')
Output for 5.6.17
Hash: $2a$08$0DiNAO56.lke9RHylS9MYegXd9NjYn0CxVTruO6RfzGhdSSRhQLJa Check correct: '1' (should be '1')
Output for 5.6.16
Hash: $2a$08$VlgkQNj3kyqbfEcw9o4ed.vfB5eaC1SIrQdUBn5r1aPfow.u1iR9y Check correct: '1' (should be '1')
Output for 5.6.15
Hash: $2a$08$yj5Y8oFL0f4sDWvzEAeBG.kf2Q4jOecNo.pFjqA2aI3x1jP1AhIfC Check correct: '1' (should be '1')
Output for 5.6.14
Hash: $2a$08$DwD2yn1ZefYN.yvj54aF..JWcv8ysVbVyGgNdbaUuNlH2JcZnQt6K Check correct: '1' (should be '1')
Output for 5.6.13
Hash: $2a$08$BIPf9vPhZe36/cIcm0TLouQOcy1P.CCDQkCgc0BVZiXwBuft5zZj. Check correct: '1' (should be '1')
Output for 5.6.12
Hash: $2a$08$z5Zz2Sp3d6VR3jzw0j6tYemICTwaGGSL0.nyAdMa6FSuAShfEKNfW Check correct: '1' (should be '1')
Output for 5.6.11
Hash: $2a$08$oy2JgcK.FHR7AzJyqIGeuuCTaHoJfeKpuLKa/wa3Dqm9WSq0Tb1eG Check correct: '1' (should be '1')
Output for 5.6.10
Hash: $2a$08$p0HTTPT0e9rDNpj23uRX4Oa4u5.F34R3lNdTlX3wWNzUji/hAl6Si Check correct: '1' (should be '1')
Output for 5.6.9
Hash: $2a$08$ek4iJ01eFy5LqXa1sDOaJus/6NDjM1xUHfOULJhDZdNIdADuA5ZCK Check correct: '1' (should be '1')
Output for 5.6.8
Hash: $2a$08$M7P/ljYg7X/weG2brebH7.xr6puGaTSj1p8uZLxNUnSGQSCsAZsEq Check correct: '1' (should be '1')
Output for 5.6.7
Hash: $2a$08$j3UdTsj9jrtVhTWpPoUYTeB67kjmukpmuElXW.l71Uj24p55TjMdm Check correct: '1' (should be '1')
Output for 5.6.6
Hash: $2a$08$0p1zoRNQnS.54kyF6sMwKeaiEuhaQ8pENzDNOl23rPGhumsvPIjaK Check correct: '1' (should be '1')
Output for 5.6.5
Hash: $2a$08$p.Iu6p/8O8bshUSWVP8gj.9QdmDEghXij3kVC.rSHAqRLVRPmXJK2 Check correct: '1' (should be '1')
Output for 5.6.4
Hash: $2a$08$Ru7tqtz/iul4ahQtNAyV6uerclJW43lTqxvomy1zRYpGgWm3PUW5S Check correct: '1' (should be '1')
Output for 5.6.3
Hash: $2a$08$bNQUOyXZ/YP5Tx4ZQk1iYexmFt.1i.YWAHDvox4ZpQjAHiiupYfEW Check correct: '1' (should be '1')
Output for 5.6.2
Hash: $2a$08$xiuurdWwEfHAEa0zZ2lXpe8DflfezmT.1iYN0ozSmhynrvNApShde Check correct: '1' (should be '1')
Output for 5.6.1
Hash: $2a$08$sjhhMCVSAkMKn.nCxmkLTOYTFyyDs51VISZXDsFiu8j.hhBzbc3zC Check correct: '1' (should be '1')
Output for 5.6.0
Hash: $2a$08$gCV9qATVI1.hDfOYPnBz9um09fHlOM6foRqtPXOGojjUO2pylc.fK Check correct: '1' (should be '1')
Output for 5.5.38
Hash: $2a$08$/JL/uNBAj4VLS/iSThuobun3SFR9ddIcwqr1.ajgoiwEXQIXWEU0i Check correct: '1' (should be '1')
Output for 5.5.37
Hash: $2a$08$kp9Hh4PMvi4SvoX8fMZnvO3F5x8qm3bK5MljZJ45u8lr1UloFgwDi Check correct: '1' (should be '1')
Output for 5.5.36
Hash: $2a$08$hsNgV6Vo5roVjohYLQnrH.Ns2a/Q9jqECLMa3TzXtnpz6rTkbYwmm Check correct: '1' (should be '1')
Output for 5.5.35
Hash: $2a$08$Q.hC01Nq9ByCyr8Ve9Nsveo1RmghNXF9zWAKFRScgdKpc4NFWY4tq Check correct: '1' (should be '1')
Output for 5.5.34
Hash: $2a$08$Rgz5O7M6LxE/d4WxOyco7efxp9bcfo9uwXgpH1wWXsBO7W6JX60Am Check correct: '1' (should be '1')
Output for 5.5.33
Hash: $2a$08$TZT56Lc5eDlvTyTwdI8R1OL6JTVXrewljKJibS1H7E4y975GEAQ0q Check correct: '1' (should be '1')
Output for 5.5.32
Hash: $2a$08$pSt3PoTGghDCeHzZDwybOOAQfJ3l1/uDayZMh3U5hyYpMGMerYfo2 Check correct: '1' (should be '1')
Output for 5.5.31
Hash: $2a$08$w0hxCyZ9QAJkbFIfOES7weralu8Zenltc/B9cK40Wo95uNKkI1P0C Check correct: '1' (should be '1')
Output for 5.5.30
Hash: $2a$08$.MeuZOoL5aLwQDbGDcKOFOCOPhCsztOs59YqE65job4WTR9GBiJq. Check correct: '1' (should be '1')
Output for 5.5.29
Hash: $2a$08$HCxMdzsn9jDArn4KN3ajxOYA6e4i0DUYjCCM97LXL7Y2OoLb9rGz6 Check correct: '1' (should be '1')
Output for 5.5.28
Hash: $2a$08$Ay58hUtyOI.m70CCKe.Wxuu5ZmpbWuh.lt.Tca5o1RuFQvOqn0qUC Check correct: '1' (should be '1')
Output for 5.5.27
Hash: $2a$08$uhB7MfVMuab4fwoeAPjVKuI0a4rFAOuby6nZnDoO6ohEAnRztkLua Check correct: '1' (should be '1')
Output for 5.5.26
Hash: $2a$08$aqyL8/tjS2g.HFc9rrqRseCfOlXHjBkEhsWw4gRyN.8O8wfif0.6e Check correct: '1' (should be '1')
Output for 5.5.25
Hash: $2a$08$0r/xge5TFMwHnvzFWjZVjev4D8q/ksEKhaeEM65JmsqnbPo9KNo5C Check correct: '1' (should be '1')
Output for 5.5.24
Hash: $2a$08$3qMQRf2UF0Nv34/W84ssFuankcSutkZBqmwoP1JBGt9LLDd783Wcq Check correct: '1' (should be '1')
Output for 5.5.23
Hash: $2a$08$QljvivLelkkkWe4v5uw0n.61VPPe2971zRM68KsVrxZG/bbpww/ea Check correct: '1' (should be '1')
Output for 5.5.22
Hash: $2a$08$K5KSntgEB/Ar.hGLfjq/UOZbvVFB14Fi5BMCSCXv84GA/bxlDLiJC Check correct: '1' (should be '1')
Output for 5.5.21
Hash: $2a$08$3jM5/MAwqHsD3g06cptSTetiDqwy4tpLGBaUyVME5QXGVcNLudtA6 Check correct: '1' (should be '1')
Output for 5.5.20
Hash: $2a$08$ReQ/sToyUEiF4NGzTDEZ6eIY.Zf2SJL9wb34ncchF8jlW3HGIUEEK Check correct: '1' (should be '1')
Output for 5.5.19
Hash: $2a$08$vH2GZqgNFRZN6R8lT7IQRucbn/nauX/6t4ydVoc.Bx39FlJkL4zr. Check correct: '1' (should be '1')
Output for 5.5.18
Hash: $2a$08$nr6Deyn0FWmwVX6ck5wYtusTjedn.Gx1ozAxeABBiWMJDn6buh8OG Check correct: '1' (should be '1')
Output for 5.5.16
Hash: $2a$08$13UYDqLk3pToZWQvao0ot.ldQMtp.d5tWdtnjB.taWvxHGQ878ACG Check correct: '1' (should be '1')
Output for 5.5.15
Hash: $2a$08$MIB081v2BWbbQBAFRzUzBe5aJXn7y0W7dQOs.kN2Z4TQqDob2MLqa Check correct: '1' (should be '1')
Output for 5.5.14
Hash: $2a$08$4pKv5Q2hEVjCdbIaw3cOxOQPxCJ73SIqVHHaxP4hT3bc/aTepi1JG Check correct: '1' (should be '1')
Output for 5.5.13
Hash: $2a$08$U5NREgS41sscGXS8mwn5De4uLHgzgowiGysYCYZ9U.dRRSTyiOM1u Check correct: '1' (should be '1')
Output for 5.5.12
Hash: $2a$08$kIE3LGSZtAovHSAAUp3zfOGqgNdHwXJsEhOEbDyURsu7Dz29xU.RC Check correct: '1' (should be '1')
Output for 5.5.11
Hash: $2a$08$fSEHLSfaDhUG9IQ0wmBEquY7aceZFISWkxpfNg8cn2zyquvstrEgq Check correct: '1' (should be '1')
Output for 5.5.10
Hash: $2a$08$Lir9bW3G8shaA5BlDLUT.uKcekHlAb39VJsrlyA8oZqibX43.zvcG Check correct: '1' (should be '1')
Output for 5.5.9
Hash: $2a$08$/7yjrNdCbGyV7N.2Dpnpp.IaqySdtGat0Z9o/SW7F/oln.5S2zqeC Check correct: '1' (should be '1')
Output for 5.5.8
Hash: $2a$08$nDkFYleusyaeluu2b3Lvc.vxJhjvfPdQ0bUNQxERdoTpB/FaIWwA6 Check correct: '1' (should be '1')
Output for 5.5.7
Hash: $2a$08$MKja3qSXmFn7YQXPbrGMbumhmiWbInLtExcUime8VuJ36gFo5Ekma Check correct: '1' (should be '1')
Output for 5.5.6
Hash: $2a$08$1tfhlR2ehi0x4gG3uQXM/uiMx.i12X9dK6P7l83EcNcLqkRKv.buC Check correct: '1' (should be '1')
Output for 5.5.5
Hash: $2a$08$LpzMG1RmYYKanvVylK7F3OuxpptePKuWTGUYFTQU7B59i.UzOs12S Check correct: '1' (should be '1')
Output for 5.5.4
Hash: $2a$08$BsC9uFQ/UZoyjmSmPo7oVOmBHlglVjppybYqj/JGvTuwt/PSrdnYi Check correct: '1' (should be '1')
Output for 5.5.3
Hash: $2a$08$uM4IkTHdcsDusVfCqkuDgeYuYFaGtxW29EeZCKf3ojfVEtC2Tc0sO Check correct: '1' (should be '1')
Output for 5.5.2
Hash: $2a$08$40Wfyqgo2.4w7y6BEQLxyu8HaeVezOZ313Rn8xAYQeNby7bIIKvAa Check correct: '1' (should be '1')
Output for 5.5.1
Hash: $2a$08$unAHW6vgi82p4nBS2KrHa.WmOg8zGhUZ/j4Hta8UIKcp.RqTe22oq Check correct: '1' (should be '1')
Output for 5.5.0
Hash: $2a$08$jdRA2g./5rSioteQNEdMU.2qiixkvQOizSHIeQIfIZJTVIZ5fGjNK Check correct: '1' (should be '1')
Output for 5.4.45
Hash: $2a$08$ROXlRGa90EJnAkc3LMI.meUN6xFcE3Gn9PAgbBFHjCKkKxo1MsaTG Check correct: '1' (should be '1')
Output for 5.4.44
Hash: $2a$08$nVNqFWwg6Cqr1L4iKRbKfePWgGvZ0iaNFqX4XNh6mp1RrE0oewtSq Check correct: '1' (should be '1')
Output for 5.4.43
Hash: $2a$08$mn7tYVKscwcuBzT12bz3yOQcgy2lbcPIqpV6Q3li1Tf218JdteuJu Check correct: '1' (should be '1')
Output for 5.4.42
Hash: $2a$08$kAPfnaLfHBk4FyXeCAKoiuWNRN0z49AvKZA6bvGgoTPZr5VQ5VwOm Check correct: '1' (should be '1')
Output for 5.4.41
Hash: $2a$08$fUcrHdwAjgTMgohRF5rjxOOE/QbJ7bH95keDD3NRMYDMX0rGNeZ/y Check correct: '1' (should be '1')
Output for 5.4.40
Hash: $2a$08$6U4ITck4HBBwN.pUbuJoCeW2yduOwL5oBRlhuXhaGGNd.uAg0rho. Check correct: '1' (should be '1')
Output for 5.4.39
Hash: $2a$08$65oetMX0lhNqa3OLOx3aee5UCr6nHA909oRsOmEkFBAagn4KyEpY2 Check correct: '1' (should be '1')
Output for 5.4.38
Hash: $2a$08$PgiY.d72mCzrTb1nLsttmui85FAKqk7cLLt/PkCLBI7GLj9B0X0TW Check correct: '1' (should be '1')
Output for 5.4.37
Hash: $2a$08$s7tG0Wc5sZCVCTN9vZIMPOhSXZ4hAzqDgTbxoa7FhtCzX8uGw.NTK Check correct: '1' (should be '1')
Output for 5.4.36
Hash: $2a$08$0LnecZOpGBREcQPKuTH5Se.Zu.I.fL4ikwSS5Bq9BD/wEZHJnwd/K Check correct: '1' (should be '1')
Output for 5.4.35
Hash: $2a$08$jO/SWZsK9/OpDm14auF8Uu33cxzBxJAGixYDdXac/TkzvApkPhn/G Check correct: '1' (should be '1')
Output for 5.4.34
Hash: $2a$08$6t284RcTIfw2KFOWVNCE1u6R0yQq254XtytaMhjW70J7yIH/ZS63q Check correct: '1' (should be '1')
Output for 5.4.32
Hash: $2a$08$wLhoasfvNq7zSRtnsksqHObXKIO.5VhhHE8zd2S8hFrZUGMW5yau2 Check correct: '1' (should be '1')
Output for 5.4.31
Hash: $2a$08$fiYy71VB2ZSRYc0OwvxFCu/HSHAzIHNBnbUjteaqsZqfsur.2ejfq Check correct: '1' (should be '1')
Output for 5.4.30
Hash: $2a$08$83rYVGIb/aLcZyObwG/HvuvdNOlSXtwA2o7g/NzlCqefefronuYm2 Check correct: '1' (should be '1')
Output for 5.4.29
Hash: $2a$08$Fxt7Ht5vpuVqpVTPi8aoXupiBCEKzVHdIlnYnDKGf4LRjjwG2IuIy Check correct: '1' (should be '1')
Output for 5.4.28
Hash: $2a$08$xkvNa7LDH/CDJDoVS87Krev24Ng.wz3O6rQ61AP3rL9.KQaP9DFly Check correct: '1' (should be '1')
Output for 5.4.27
Hash: $2a$08$O8X98fTfgbdFAr2UKA/HzuhcmqeEomzM7AioxnEPp8BtCU0tm5h96 Check correct: '1' (should be '1')
Output for 5.4.26
Hash: $2a$08$LLoM19qFpwB/Bc7ZJg1DOepR46aj0Mu4C/OZgTUAMGarpL6FOwhpW Check correct: '1' (should be '1')
Output for 5.4.25
Hash: $2a$08$9SRB/u.ejzdG.cK/YPfK8.lwRjiRjS2rta1Oafme4p0odImpTDoc2 Check correct: '1' (should be '1')
Output for 5.4.24
Hash: $2a$08$7u91bhx2zeXjyeYhuctUYO1wc075Wrl6Pz.iDeIt7S1/xR4k6MKlO Check correct: '1' (should be '1')
Output for 5.4.23
Hash: $2a$08$zEvx2kLYx7cUNm8wgMLUWOIatpPPJQivZ3S1xGd8QVBQ2igb9ceVG Check correct: '1' (should be '1')
Output for 5.4.22
Hash: $2a$08$ds66d2TIiCeW3nfUvuAs6OJRUQ.EM4NWSJ12pO6m3WMmaViIyMbQi Check correct: '1' (should be '1')
Output for 5.4.21
Hash: $2a$08$fYTWLk./NXbMMXxcl3ipTu3rqc3AAW/x1f7Dm9m5L5EQzZKS3khFy Check correct: '1' (should be '1')
Output for 5.4.20
Hash: $2a$08$UT2y1aqhqbknFF0gUQy58.eWSGOIbbwRfu8XvDVpO3ZX.Xrgikp4i Check correct: '1' (should be '1')
Output for 5.4.19
Hash: $2a$08$cGJP7u5pDOew4nNz5oKsO.7Z7rBq6gIPOU.C.GxQGEiku9tjXBsHa Check correct: '1' (should be '1')
Output for 5.4.18
Hash: $2a$08$vT8.yvZ22wW0wQ7JcFZTNeDfnubRcd3a1./WHtejQdI68ArTQf6Qm Check correct: '1' (should be '1')
Output for 5.4.17
Hash: $2a$08$lxiL8L4bXwLYymDRCpGtJu11sVz9OlzpyMF0eWZpLJDzuQ4XTkOBO Check correct: '1' (should be '1')
Output for 5.4.16
Hash: $2a$08$ZqqdV2gDHDhnlRLuLuSUFe4dLXK1lUPCk0Qsqv8YnC06JhuQRnzIK Check correct: '1' (should be '1')
Output for 5.4.15
Hash: $2a$08$4DxG9WKAb4d5WfuPPhx2vOSBI61J4Df5oWztEhkI7d34wYDA.teqG Check correct: '1' (should be '1')
Output for 5.4.14
Hash: $2a$08$jHfp4Qro6py0QSa1eVZLWuZd4EDTHiijawO/gLcyzNcB.IhLtI7Ua Check correct: '1' (should be '1')
Output for 5.4.13
Hash: $2a$08$EbteG/mC4L55jflwZeiYOOwqWnW.T975Jcyik8w8pLQkQbLQd0mDq Check correct: '1' (should be '1')
Output for 5.4.12
Hash: $2a$08$vk7dIenhao7wvV5vufD88eUEesrsgJ/xB9UIbaBAGpEIIdrgfTVeW Check correct: '1' (should be '1')
Output for 5.4.11
Hash: $2a$08$.9l2dK0vSdXTuU9P5y/w7eTfFgg25qAgeNXXTqI7c8arHemtYA.LO Check correct: '1' (should be '1')
Output for 5.4.10
Hash: $2a$08$RI7T0QTM6TuTwCXLDsPPn.KjTKXohp8uSbaBSbKrE.ykOnCjm/QK6 Check correct: '1' (should be '1')
Output for 5.4.9
Hash: $2a$08$vCl3fHOHb7706RXS93flpOFoZBaQDjYKPXVpPGBNuIqiVTzzEreim Check correct: '1' (should be '1')
Output for 5.4.8
Hash: $2a$08$4B2TRuNRbx98ALI4t5prOusSuOIrHWledRFUFRg/FktkzbsJuj8Ca Check correct: '1' (should be '1')
Output for 5.4.7
Hash: $2a$08$9MNRVL9D0BBMsaSQ.m/PfugLMjQknQorVPBRhLpkzH5e4pLaVea3W Check correct: '1' (should be '1')
Output for 5.4.6
Hash: $2a$08$dBWNPlhnP86Ub.FcPWmc0unYuCY3V5YikExibpZw3f1tbuNRDToSi Check correct: '1' (should be '1')
Output for 5.4.5
Hash: $2a$08$cFQLZOFTkXszYv1KKH1PJ.x8OWuZ4ZUQJio2Q4UOQw0TlKj3MLn3O Check correct: '1' (should be '1')
Output for 5.4.4
Hash: $2a$08$ao0KtbgEhiJ/PJ9SFXGnM.pfkru5wnOdclSGo5BQOlBoz4CwqFhd2 Check correct: '1' (should be '1')
Output for 5.4.3
Hash: $2a$08$WqI3rK6VruMAO0WG6/nBwe3jmqAeVkOBE4zK97bZXJfJS9ODvX1kC Check correct: '1' (should be '1')
Output for 5.4.2
Hash: $2a$08$ymZGfyjMXwwddXomwnvG0.2hnE9FUbxruc0/YjZD8NrF7NuEBbj7O Check correct: '1' (should be '1')
Output for 5.4.1
Hash: $2a$08$J3r2.DZvQUo7BNQe83iC2uJRBbaAulI2psviVgkzZXp0VSiS91scm Check correct: '1' (should be '1')
Output for 5.4.0
Hash: $2a$08$RFPGpYhrkA7qcr4UTCeKxuim/eoI43c8MFFWH4i4K0CLpziA31hpa Check correct: '1' (should be '1')
Output for 5.3.29
Hash: $2a$08$fEO3bCNNgRI5YK6YLW6Q/uoO9vPT1nZ93ChU2nJ.HOPB5Y0iBdh5. Check correct: '1' (should be '1')
Output for 5.3.28
Hash: $2a$08$Wb1v0bi1di3VtblhvyBnsub1lNNSG9iZYWaVOQ7iSgJWVYg73a3pu Check correct: '1' (should be '1')
Output for 5.3.27
Hash: $2a$08$g83gfYCOs6vxKDyzWPOo7eOxIgKU8cJ3pofdnVhajaoDXu78oJdB6 Check correct: '1' (should be '1')
Output for 5.3.26
Hash: $2a$08$QEL6WIpznj6lZHq7f1qSE.IXFG2Pr/bIuGYOXjSou0NIgFbJnOv6C Check correct: '1' (should be '1')
Output for 5.3.25
Hash: $2a$08$iPo5HiOU3TCakMsWJ2ZvwO6HesblwQXvTXmn2w92TiJ/iCIF1681e Check correct: '1' (should be '1')
Output for 5.3.24
Hash: $2a$08$7uaD86W52tQRhhjh7jiRWOe8cX3k.3HWNc0wfiseGPcPumY8fKnwK Check correct: '1' (should be '1')
Output for 5.3.23
Hash: $2a$08$jOPYeya8zUbdNW.TQoEv7eWfH7WX4.wudij/IVGEppqViJl/IHwP2 Check correct: '1' (should be '1')
Output for 5.3.22
Hash: $2a$08$hYM9gioOMgn1lO8vWjQZOufob.GNxx0GA8i8gULwjOvpnlxvMc/ma Check correct: '1' (should be '1')
Output for 5.3.21
Hash: $2a$08$tor0U5z.pli3FSYo/D3ISuURAP3e4LMGv/4mjWzG71WKByjfI17My Check correct: '1' (should be '1')
Output for 5.3.20
Hash: $2a$08$tZhVA1tCbg7uv3Oi2ififegVkfH7ghPeg5h0d/wVJ.qTzJpjtiBsi Check correct: '1' (should be '1')
Output for 5.3.19
Hash: $2a$08$xBRFvORhYGvxJ/3.OK8TKu67Vw1T6xZPb2UEa.LJPT6GXUiO0lOHS Check correct: '1' (should be '1')
Output for 5.3.18
Hash: $2a$08$3tuHwOhu/6HV9Zekud2iHuD90zMRrf/Yfuh9HYMs3PLFN0iGsfVQC Check correct: '1' (should be '1')
Output for 5.3.17
Hash: $2a$08$Dv4JvwTv57Rr/Uas7HEvlutAFIqxr8S9mRhXAFkBfPerrO4mbYrHa Check correct: '1' (should be '1')
Output for 5.3.16
Hash: $2a$08$LkIN.Qz7.LbnQOOdRvECQuqoShRrXUhxrMYPz0MivzmsCa6ceC1ei Check correct: '1' (should be '1')
Output for 5.3.15
Hash: $2a$08$k3P1YQOfad8i3EUMmahtKuEk6Wkb0KaDpN23m2400wfW19dN8W4d. Check correct: '1' (should be '1')
Output for 5.3.14
Hash: $2a$08$3ooUHYvItCUIF956aacJYuh.VuGbJ5jVoDCQJaFQywX0vr/XBid4. Check correct: '1' (should be '1')
Output for 5.3.13
Hash: $2a$08$MDD/f.ncUgMefpLKr/OcA.EZvZ4lYo63DHJ3t3q8XcYtMIJj7cQ9m Check correct: '1' (should be '1')
Output for 5.3.12
Hash: $2a$08$/f0KuIqEEiCvFLIQvCwFEua0Tqv7TmTwlGNFIjLnZt.1XQqJJcCCC Check correct: '1' (should be '1')
Output for 5.3.11
Hash: $2a$08$yGyfkvQ5sCdZRq0y3R4qw..GFbYrkL65swvzBF2vPpHKQHEvJlP3u Check correct: '1' (should be '1')
Output for 5.3.10
Hash: $2a$08$PZmVhhaoQiZDvqy6eA/jhOFB5/J4l6WYxeFrNhSE0VplLSHFJh2tW Check correct: '1' (should be '1')
Output for 5.3.9
Hash: $2a$08$YLnXAT0XpsKjuXFyCzAUx.mCLurZ/9tLzd2hw8QM.qXDoS4agnUiG Check correct: '1' (should be '1')
Output for 5.3.8
Hash: $2a$08$BZlGbMZr3sT8B46jtOWBg.xVBbWsITKoTJ9gSLjj6Lw8YjgBwf5/m Check correct: '1' (should be '1')
Output for 5.3.7
Hash: $2a$08$8eIWGMdoiQYOk.lkbqq1Ve1.AuzZM4X8F12Fb6iSSkyPcQPuCbK0a Check correct: '1' (should be '1')
Output for 5.3.6
Hash: $2a$08$hOs2gsSxmm.I4/7KLMs/h.DwJ3hvzt7voq7aQvSfvBIGpovn5UhpS Check correct: '1' (should be '1')
Output for 5.3.5
Hash: $2a$08$gOKdt.NzQG2XPkKnS2Ifeu/Ex5G6hNbd5A86b8mCzBMjPo6MgNvP2 Check correct: '1' (should be '1')
Output for 5.3.4
Hash: $2a$08$vg.UnI1QyUnBBw0.UL.3ZeK8ubua08X2I4BE8eBZjwIz8Xz0KWpXa Check correct: '1' (should be '1')
Output for 5.3.3
Hash: $2a$08$l4bFOde04f1yZOtTGWMp5.vq96Q/Iq/qwKLHD78JRRRsYNhHt.Bou Check correct: '1' (should be '1')
Output for 5.3.2
Hash: $2a$08$Y1ihyISuJsn93Ty8kgh.vu7eDUBH1XwdBo0A9jsL9D4xxA9otVSUu Check correct: '1' (should be '1')
Output for 5.3.1
Hash: $2a$08$HRQNVd4E9Mcp5cYP13y.ceTeJ5XC8jmLevSAWjDN5mw76NaCySjK2 Check correct: '1' (should be '1')
Output for 5.3.0
Hash: $2a$08$a900K.W7ZgR4CSxQRjGHCew0609It5XU/LmY5n4t3FsIpYxfKCG3y Check correct: '1' (should be '1')