/** * url_crypt加密算法的加密函数 * * @param string $tpl 产品线的tpl标识 * @param string $key 加密所用的key * @param string $str 需要加密的内容 * @return 加密后的16进制字符串或者false */ public static function url_encrypt($tpl, $key, $str) { // first fcrypt hmac if (empty($str)) { return false; } $fcrypt_hash = fcrypt_encode_hmac(self::_buildFcryptKey($tpl, $key), $str); // then transform to low hex digits // the not ported fcrypt_encode_hex_low function use high nibble first style // why not use bin2hex? bin2hex is not clearly high nibble $fcrypt_hstr_arr = unpack('H*hash', $fcrypt_hash); if (isset($fcrypt_hstr_arr['hash'])) { $fcrypt_hstr = strtolower($fcrypt_hstr_arr['hash']); } else { return false; } return $fcrypt_hstr . sprintf("%04x", self::_crc16($fcrypt_hstr)); }
private function _makeNshead($logid_int, $query_pack) { $nshead = new ZCacheNsHead(); $nshead_arr['provider'] = "zcacheadapter"; $nshead_arr['log_id'] = $logid_int; $nshead_arr['reserved'] = $this->zcfObj->crypt_flag; if ($this->zcfObj->crypt_flag) { $crypt_data = fcrypt_encode_hmac('key', $query_pack); //$this->_log("fcrypt_encode_hmac: " . strlen($query_pack) . " " . strlen($crypt_data) ); $nshead_arr['body_len'] = strlen($crypt_data); $buffer = $nshead->build_nshead($nshead_arr) . $crypt_data; } else { $nshead_arr['body_len'] = strlen($query_pack); $buffer = $nshead->build_nshead($nshead_arr) . $query_pack; } return $buffer; }
/** * 生成图片sign * $sign_str 加密前的字符串 */ private function _create_sign($sign_str) { $s = fcrypt_encode_hmac($this->crypt_key, $sign_str); return bin2hex($s); }