classCrypthelper {/** * Encryption * @param unknown $password * @param unknown $salt * @return String*/ public Static function Crypt($password,$salt){ //$saltPrefix. = ' $2y$ ';//Blowfish algorithm//$saltPrefix. = ' 13 ';//two-bit cost parameter//$saltPrefix. = ' $ '; A $//$saltSuffix. = ' lgsf2ctmkkhe1yr2py.vtu '; return Crypt($password,$salt); } /** * Character comparison * @param unknown $expected * @param unknown $actual * @return Boolean*/ public Static functionCompareString ($expected,$actual) { $expected. = "+"; $actual. = "+"; $expectedLength= Mb_strlen ($expected, ' 8bit '); $actualLength= Mb_strlen ($actual, ' 8bit '); $diff=$expectedLength-$actualLength; for($i= 0;$i<$actualLength;$i++) { $diff|= (Ord($actual[$i]) ^Ord($expected[$i%$expectedLength])); } return $diff= = 0; } /** * Check password * @param unknown $password * @param unknown $hash * @return Boolean*/ public Static functionValidatePassword ($password,$hash) { if(!is_string($password) ||$password= = = "") { return false; } if(!Preg_match('/^\$2[axy]\$ (\d\d) \$[\.\/0-9a-za-z]{22}/',$hash,$matches) ||$matches[1] < 4 | |$matches[1] > 30 ) { return false; } $test= self::Crypt($password,$hash); $n=strlen($test); if($n!== 60) { return false; } returnSelf::comparestring ($test,$hash); }}
Test
//---------test--------//encryption$salt= ' $2y$13$lgsf2ctmkkhe1yr2py.vtu ';//7 + = =$password= ' Aa123456 ';Echocrypthelper::Crypt($password,$salt);Echo Php_eol;//Checksum$hash= ' $2y$13$lgsf2ctmkkhe1yr2py.vtuiur/a0c6tarkcxmo.lulsirisu7u53m ';Echocrypthelper::Crypt($password,$hash);Echo Php_eol;Echo strlen($hash);Echo Php_eol;EchoCrypthelper::validatepassword ($password,$hash);
PHP cryptr Cryptographic functions