2-weg encrypt / decrypt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mobile Developer in Oost-Nederland (Android en/of

Bedrijfsomschrijving Een unieke kans voor Mobile Developers in Oost-Nederland. Deze prachtige organisatie is namelijk opzoek naar een Mobile Developer. Mobile Development en Ops Engineering gaan hand in hand bij deze organisatie dat een hoog verantwoordelijkheidsgevoel draagt. Als organisatie ontwikkelt zij dan ook veelal mobiele applicaties ter inspiratie en ondersteuning van belangrijke sectoren in Nederland. Met het technische team van gepassioneerde developers en engineers voeren ze dagelijks veelal diverse, inspirerende en complexe werkzaamheden uit. Door gebruik van innovatieve software en de nieuwste platformen binnen de sector is deze klant dan ook zeker als vooruitstrevend te betitelen waar zijn enorm veel waarde

Bekijk vacature »

Marco V

Marco V

15/01/2015 12:12:04
Quote Anchor link
Ik werk aan een shop (url1) waar gebruikers die een item kopen, voor hun betaling worden doorgestuurd naar een andere locatie via header('location: url2...

Niet alle gegevens, maar wel enkele referenties worden hier van url1 naar url2 gestuurd via de header. Op url2.com worden deze referenties via $_GET verkregen, gevalideerd en vervolgens daarmee de volledige gegevens er weer bij gehaald.

Voorgaande resulteert dan bijvoorbeeld in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php header('location: https://www.url2.com?bestelling=1&product=2&klant=3'); exit; ?>


Dit nodigt gebruikers echter uit om daar wat mee te klooien, kortom hier ontstond het idee om te gaan encrypten en decrypten mbv een "shared secret". De meeste resultaten die je op 2-weg encryptie zult vinden werken met een IV (initialization vector), maar volgens mij gaat dat sowieso cross-url nooit werken.

Al zoekende kwam ik op het onderstaande script, ik maak header nu alsvolgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php header('location: https://www.url2.com?req=zTTLaG8WFyeR5/Ctgjc0PT5HFIEjaj8H/YNJhgSsC8Gp+eXEGVXuoGUQeNKKyggj1wcyKWIsIZto6OSP9+xDsg=='); exit; ?>


De variabele "req" bevat nu een encrypted string waarin de variabelen staan (een array die eerst met implode("|",$vars); naar een string is gezet).

Dit lijkt te werken, maar het testen gaat het toch niet altijd goed...

Om het probleem verder te ontrafelen heb ik uiteindelijk de string zowel ongecodeerd als encrypted als variabelen toegevoegd aan de url om vervolgens daar waar ik decodeer ook de beschikking te hebben over de oorspronkelijke (ongecodeerde) string.

Wanneer het decrypten faalde heb ik de oorspronkelijke string (ongecodeerd dus) alsnog encrypt en vergeleken met de encrypted waarde in de url die zojuist faalde bij decrypt. Deze bleken echter identiek.

Inmiddels heb ik enkele encrypted waardes verzameld welke dezelfde string als oorsprong hebben, wanneer ik deze decrypted print komt daar bij allen weer dezelfde string uit.

Ik ben dus compleet de weg kwijt, iemand nog een idee wat hier niet goed gaat?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php

/**
    zie ook:
    http://stackoverflow.com/questions/3422759/php-aes-encrypt-decrypt
**/

/* voorbeeld
$Pass = "Passwort";
$Clear = "Klartext";        

$crypted = fnEncrypt($Clear, $Pass);
echo "Encrypred: ".$crypted."</br>";

$newClear = fnDecrypt($crypted, $Pass);
echo "Decrypred: ".$newClear."</br>";        
*/


function fnEncrypt($sValue, $sSecretKey)
{

    return rtrim(
        base64_encode(
            mcrypt_encrypt(
                MCRYPT_RIJNDAEL_256,
                $sSecretKey, $sValue,
                MCRYPT_MODE_ECB,
                mcrypt_create_iv(
                    mcrypt_get_iv_size(
                        MCRYPT_RIJNDAEL_256,
                        MCRYPT_MODE_ECB
                    ),
                    MCRYPT_RAND)
                )
            ),
"\0"
        );
}

function
fnDecrypt($sValue, $sSecretKey)
{

    return rtrim(
        mcrypt_decrypt(
            MCRYPT_RIJNDAEL_256,
            $sSecretKey,
            base64_decode($sValue),
            MCRYPT_MODE_ECB,
            mcrypt_create_iv(
                mcrypt_get_iv_size(
                    MCRYPT_RIJNDAEL_256,
                    MCRYPT_MODE_ECB
                ),
                MCRYPT_RAND
            )
        ),
"\0"
    );
}

?>
Gewijzigd op 15/01/2015 16:04:13 door Marco V
 
Er zijn nog geen reacties op dit bericht.



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.