2-weg encrypt / decrypt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full Stack Developer-/ in (w/m/d) in Vollzeit

Wer sind wir? agriportance GmbH ist ein junges Start-Up Unternehmen und die Plattform für den erneuerbaren Treibstoff Biomethan/Bio-LNG mit Sitz in Münster. Als solche vermitteln wir Biomethan von landwirtschaftlichen geprägten Produzenten an Abnehmer aus dem Energiesektor und begleiten die notwendige Nachhaltigkeitszertifizierung. Da die Nachfrage nach Biomethan immer weiter steigen wird, sehen wir uns als Zukunftsorientierter und spannender Arbeitsgeber. Für weitere Informationen schau dir gerne unsere Website an: https://agriportance.com Zur Vergrößerung unseres Teams suchen wir zum nächstmöglichen Zeitpunkt einen engagierten Full Stack Developer-/ in (w/m/d) in Vollzeit Unser Team sucht sowohl Berufseinsteiger als auch erfahrene Mitarbeiter, denn jeder findet bei agriportance

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.