openEnvelope(); if (!$result) { throw new Exception('Trying to digest empty password!'); } for ($ii = 0; $ii < 1000; $ii++) { $result = PhabricatorHash::digest($result, $salt); } return $result; } /** * Digest a string for use in, e.g., a MySQL index. This produces a short * (12-byte), case-sensitive alphanumeric string with 72 bits of entropy, * which is generally safe in most contexts (notably, URLs). * * This method emphasizes compactness, and should not be used for security * related hashing (for general purpose hashing, see @{method:digest}). * * @param string Input string. * @return string 12-byte, case-sensitive alphanumeric hash of the string * which */ public static function digestForIndex($string) { $hash = sha1($string, $raw_output = true); static $map; if ($map === null) { $map = '0123456789'. 'abcdefghij'. 'klmnopqrst'. 'uvwxyzABCD'. 'EFGHIJKLMN'. 'OPQRSTUVWX'. 'YZ._'; } $result = ''; for ($ii = 0; $ii < 12; $ii++) { $result .= $map[(ord($hash[$ii]) & 0x3F)]; } return $result; } }