// perform the other $count - 1 iterations for ($j = 1; $j < $count; $j++) { $xorsum ^= $last = hash_hmac($algorithm, $last, $password, true); } $output .= $xorsum; } if ($raw_output) { return substr($output, 0, $key_length); } else { return bin2hex(substr($output, 0, $key_length)); } } } // // Register some cool base encoders // Cipher::registerBaseEncoder(Cipher::BASE_USER_SAFE, array('encode' => function ($str) { return Cipher::baseConvertMapped($str, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/', '0123456789bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ'); }, 'decode' => function ($str) { return Cipher::baseConvertMapped($str, '0123456789bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'); })); Cipher::registerBaseEncoder(Cipher::BASE_PRINTABLE, array('encode' => function ($str) { return Cipher::baseConvertMapped($str, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/', '3467bcdfhjkmnpqrtvwxy'); }, 'decode' => function ($str) { return Cipher::baseConvertMapped($str, '3467bcdfhjkmnpqrtvwxy', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'); })); Cipher::registerBaseEncoder(Cipher::BASE_ASCII, array('encode' => function ($str) { return Cipher::baseConvertMapped($str, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/ !"#$%&\'()*,-.:;<=>?@[\\]^_`{|}~', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'); }, 'decode' => function ($str) { return Cipher::baseConvertMapped($str, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/ !"#$%&\'()*,-.:;<=>?@[\\]^_`{|}~'); }));