Pages :
Salut Jencal,

Voici une piste, mais je ne suis pas sur que ça soit la meilleur solution, ni une "bonne solution".
Mais je m'orientrais vers les fonctions natives de php d'encodage:

$var = "paramB=1&paramA=2";

// encodage de la chaîne
$varEncoded = url_encode(base64_encode($var));

// décodage de la chaîne
$var = base64_decode(url_decode($varEncoded));


Sinon tu peux t'orienter vers la librairie Sodium, mais aujourd'hui c'est un peu plus exotique à utiliser tant que ce n'est pas implémenté de manière homogène (Debian 9 utilise php 7.0, or cette librairie est implémentée nativement à partir de 7.2). Mais il existe un package pour composer qui fonctionne très bien avec Symfony.
merci à toi
j'ai regarder un peu tous, et base64 n'est pas une "bonne" solution car n'importe qui peut décrypter celle ci. je pense plus utilisé base64 mais couplet avec crypt() via un token avec mon $salt en token;

	function simple_encrypt($text)
	{
		return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->$salt, $text, MCRYPT_MODE_ECB,            mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
	}

	function simple_decrypt($text)
	{
		return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->$salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
	}
Ah j'avais pas compris que tu ne voulais pas qu'on puisse décoder. Je croyais que tu voulais juste une chaîne de caractères au lieu d'une liste de paramètres.

Par contre ce sont des fonctions obsolètes que tu utilises là.
Il faut passer par la librairie Sodium si tu veux faire du code à jour:
php.net a écrit :

mcrypt_decrypt — Déchiffre un texte avec les paramètres donnés

Cette fonction est devenue OBSOLÈTE dans PHP 7.1.0, et SUPPRIMÉE dans PHP 7.2.0.
Oui je viens de voir que c'était obsolète ! oops !
vu que je suis sur PHP7.0 j'avais pas capté avant !

Du coup, je continue de chercher Smiley smile et je suis toujours preneur de bonnes idées
Modérateur
Petite question, est-ce que c'est pour éviter d'avoir des données en clair dans l'url ou c'est pour s'assurer de la validité des données et ne pas pouvoir modifier une valeur à l'aveugle ?

Pour la première idée, je n'ai pas de solution mais pour la seconde, dans certains projet, on a déjà fait ça :

…?param1=a&param2=b&param3=c&token=123
-> le token est généré et hashé (en non réversible) en concaténant le tout + une secret key.

en recevant cette url, on fait la même opération et on compare les token pour valider les données.
Hmmmmm...
le but est effectivement de "cacher" les paramètres, le nom des paramètre ainsi que leur valeur.
En tout cas pour tous ce qui est URL externe (en interne on cache rien).
et même, au dela de cacher de simple paramètre, si je trouve pour cacher même mon routing
Alors tu peux tester cette méthode:
1/ Tu installes la librairie Sodium dans ton projet Symfony:
composer require paragonie/sodium_compat


2/ Puis tu utilises ces fonctions là (dans un Service par exemple) pour encoder/décoder ta chaîne de caractères:

    public function sodiumEncode($text, $passPhrase)
    {
        $nonce = random_bytes(24);
        $encrypted = \ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt(
            $text,
            $nonce,
            $nonce,
            $passPhrase
        );

        return bin2hex($nonce.$encrypted);
    }

    public function sodiumDecode($text, $passPhrase)
    {
        $text = hex2bin($text);
        $nonce = mb_substr($text, 0, 24, '8bit');
        $ciphertext = mb_substr($text, 24, null, '8bit');

        return \ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt(
            $ciphertext,
            $nonce,
            $nonce,
            $passPhrase
        );
    }


L'avantage de cette méthode, c'est qu'au moment ou tu changeras de version de PHP, tu n'auras plus qu'à supprimer la librairie, puis tu mettra à jour ton code pour gérer cela nativement.
PS: ta clé doit être de 32 caractères.
Meilleure solution
Super, cette version est valable uniquement pour Symfony du coup ?

J'ai un autre projet qui "créer" un mail avec une url (elle doit donc être crypter) et de mon coté je dois la décrypter.. du coup cette méthode est bien pour mon projet symfony, mais est-elle réutilisable en dehors ?

Merci à toi en tout cas!
il suffirait d'ajouter Sodium à son projet en faite... le hic c'est que sont projet c'est du PHP 5.3. je crois que Sodium est compatible
Oui pas de soucis tu peux utiliser cette librairie en dehors de Symfony.
Tu peux aller sur leur Github tu verra c'est expliqué.

Par contre je suis pas sur d'avoir bien compris ton dernier message...?
Cette librairie est compatible de PHP 5.2.4 à 7.x, mais officiellement elle ne supporte que les versions encore maintenue de PHP, mais officieusement, ça doit quand même passer.
Disons que c'est utile, tant que t'es pas sur une version de PHP (à partir de 7.2) qui supporte nativement la librairie Sodium.
Ok, je n'avais pas vu le "PHP 5 => 5.2" donc tous est bon.
Modifié par JENCAL (17 Oct 2018 - 11:03)
Pour Sodium, ok, mais il faut que la librairie soi bien compilé. Chez moi, ce n'est pas le cas donc out !!! Smiley fache
@Tintin75: perso j'ai abandonné la tentative d'installer Sodium autrement que via ce projet Github tant que je suis pas en PHP 7.2. C'était la misère, j'obtenais jamais le résultat voulu, et la moitié des fonctions de Sodium n'étaient pas implémentées ou pas complètement.
Le mieux reste, à mon avis, de passer par ce projet.
Bon ben sodium a de gros problème avec php 5.3, en tout cas de ce que dit mon collègue (j'avoue ne pas avoir regardé du tout!).

Donc j'ai bricoler autre choses :
	function cryptOrDecrypt( $string, $action = 'e' ) {
	    $secret_key = 'CE QUE JE VEUX';
	    $secret_iv = 'CE QUE JE VEUX AUSSI';
	 
	    $output = false;
	    $encrypt_method = "AES-256-CBC";
	    $key = hash( 'sha256', $secret_key );
	    $iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );
	 
	    if( $action == 'e' ) {
	        $output = base64_encode( openssl_encrypt( $string, $encrypt_method, $key, 0, $iv ) );
	    }
	    else if( $action == 'd' ){
	        $output = openssl_decrypt( base64_decode( $string ), $encrypt_method, $key, 0, $iv );
	    }
	    return $output;
	}


Ceci fonctionne bien avec sa version de php.
Raphi a écrit :
@Tintin75: perso j'ai abandonné la tentative d'installer Sodium autrement que via ce projet Github tant que je suis pas en PHP 7.2. C'était la misère, j'obtenais jamais le résultat voulu, et la moitié des fonctions de Sodium n'étaient pas implémentées ou pas complètement.
Le mieux reste, à mon avis, de passer par ce projet.


Si tu as une notice, ça m'intéresse, car je suis sur un projet ou j'en aurai besoin.
Merci d'avance Smiley cligne
JENCAL a écrit :
Bon ben sodium a de gros problème avec php 5.3, en tout cas de ce que dit mon collègue (j'avoue ne pas avoir regardé du tout!).

Donc j'ai bricoler autre choses :
	function cryptOrDecrypt( $string, $action = 'e' ) {
	    $secret_key = 'CE QUE JE VEUX';
	    $secret_iv = 'CE QUE JE VEUX AUSSI';
	 
	    $output = false;
	    $encrypt_method = "AES-256-CBC";
	    $key = hash( 'sha256', $secret_key );
	    $iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );
	 
	    if( $action == 'e' ) {
	        $output = base64_encode( openssl_encrypt( $string, $encrypt_method, $key, 0, $iv ) );
	    }
	    else if( $action == 'd' ){
	        $output = openssl_decrypt( base64_decode( $string ), $encrypt_method, $key, 0, $iv );
	    }
	    return $output;
	}


Ceci fonctionne bien avec sa version de php.


Sodium, ne fonctionne qu'à partir de php 7.0, et il faut que ton serveur soit bien configuré, ce qui n'est pas mon cas avec Plesk, qui traine les pieds pour le faire fonctionner. Niveau sécurité c'est top et recommandé par Symphony
Tintin75 a écrit :

Si tu as une notice, ça m'intéresse, car je suis sur un projet ou j'en aurai besoin.
Merci d'avance Smiley cligne


La notice est très simple Smiley lol :
composer require paragonie/sodium_compat

Puis tu appelles les fonctions en provenance de cette librairie.

Et si tu n'utilises pas composer, télécharge la librairie et tu met ça dans ton code PHP:
require_once "/path/to/sodium_compat/autoload.php";

Tout est indiqué dans la documentation.
Modifié par Raphi (17 Oct 2018 - 14:49)
JENCAL a écrit :
Bon ben sodium a de gros problème avec php 5.3, en tout cas de ce que dit mon collègue (j'avoue ne pas avoir regardé du tout!).

Il a testé avec la librairie indiquée et le code que j'ai renseigné?
Quels problèmes exactement?

Peut-être qu'il y a moyen de le débloquer, si le problème ne vient pas de Sodium.
Pages :