skey = $appConfig->GetSKey(); } /** * Generate base64 hash for the object * * @param array $object - object to signature hash * * @return string */ public function GetHash($object) { $primaryKey = json_encode($object); $hash = $this->SignatureCreate($primaryKey); return $hash; } /** * Create an object from the base64 hash * * @param string $hash - base64 hash * * @return array */ public function ReadHash($hash) { $result = NULL; $error = NULL; if ($hash === NULL) { return [$result, "hash is empty"]; } try { $payload = base64_decode($hash); $payloadParts = explode("?", $payload); $encode = base64_encode( hash( "sha256", ($payloadParts[1] . $this->skey), true ) ); if ($payloadParts[0] === $encode) { $result = json_decode($payloadParts[1]); } else { $error = "hash not equal"; } } catch (\Exception $e) { $error = $e->getMessage(); } return [$result, $error]; } /** * Generate base64 hash for the object * * @param string $primary_key - string to the signature hash * * @return string */ private function SignatureCreate($primary_key) { $payload = base64_encode( hash( "sha256", ($primary_key . $this->skey), true ) ) . "?" . $primary_key; $base64Str = base64_encode($payload); return $base64Str; } }