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);