function test_verifyMd5Hash_inifile() { //Arrange $prefix = null; $sharedKey = "zaqxswcdevfrbgtnhymjukiloZAQCDEFRBGTNHYMJUKILOPlkjhgfdsapoiuytrewqmnbvcx"; $expectedPlaceInqueue = 7810; $expectedQueueId = "fe070f51-5548-403c-9f0a-2626c15cb81b"; $placeInQueueEncrypted = "3d20e598-0304-474f-87e8-371a34073d3b"; $unixTimestamp = 1360241766; $expectedTimeStamp = new DateTime("2013-02-07 12:56:06", new DateTimeZone("UTC")); $expectedCustomerId = "somecust"; $expectedEventId = "someevent"; $expectedOriginalUrl = "http://www.example.com/test.aspx?prop=value"; $urlNoHash = $expectedOriginalUrl . "?" . $prefix . "c=somecust&" . $prefix . "e=someevent&" . $prefix . "q=" . $expectedQueueId . "&" . $prefix . "p=" . $placeInQueueEncrypted . "&" . $prefix . "ts=" . $unixTimestamp . "&" . $prefix . "h="; $expectedHash = md5(utf8_encode($urlNoHash . $sharedKey)); $url = $urlNoHash . $expectedHash; $urlProvider = new MockUrlProvider($url, $expectedOriginalUrl, $expectedQueueId, $placeInQueueEncrypted, (string) $unixTimestamp, $expectedCustomerId, $expectedEventId); //Act KnownUserFactory::reset(true); $knownUser = KnownUserFactory::verifyMd5Hash(null, $urlProvider, null); $this->assertNotNull($knownUser); $this->assertEqual($expectedQueueId, $knownUser->getQueueId()); $this->assertEqual($expectedPlaceInqueue, $knownUser->getPlaceInQueue()); $this->assertEqual($expectedTimeStamp, $knownUser->getTimeStamp()); $this->assertEqual($expectedCustomerId, $knownUser->getCustomerId()); $this->assertEqual($expectedEventId, $knownUser->getEventId()); $this->assertEqual($expectedOriginalUrl, $knownUser->getOriginalUrl()); }
$e = $encryptedPlaceInQueue; $p = substr($e, 30, 1) . substr($e, 3, 1) . substr($e, 11, 1) . substr($e, 20, 1) . substr($e, 7, 1) . substr($e, 26, 1) . substr($e, 9, 1); //uses one char of each string at a given starting point return (int) $p; } public static function encryptPlaceInQueue($placeInQueue) { $encryptedPlaceInQueue = guid(); $paddedPlaceInQueue = str_pad($placeInQueue, 7, "0", STR_PAD_LEFT); $encryptedPlaceInQueue[9] = $paddedPlaceInQueue[6]; $encryptedPlaceInQueue[26] = $paddedPlaceInQueue[5]; $encryptedPlaceInQueue[7] = $paddedPlaceInQueue[4]; $encryptedPlaceInQueue[20] = $paddedPlaceInQueue[3]; $encryptedPlaceInQueue[11] = $paddedPlaceInQueue[2]; $encryptedPlaceInQueue[3] = $paddedPlaceInQueue[1]; $encryptedPlaceInQueue[30] = $paddedPlaceInQueue[0]; return $encryptedPlaceInQueue; } private static function verifyUrl($url, $sharedEventKey) { $expectedHash = substr($url, -32); $urlNoHash = substr($url, 0, -32) . $sharedEventKey; //Remove hash value and add SharedEventKey $actualhash = md5(utf8_encode($urlNoHash)); if (strcmp($actualhash, $expectedHash) != 0) { throw new invalidKnownUserHashException('The hash of the request is invalid'); } } } KnownUserFactory::reset(true);