Besoin d'aide ?

Afficher des images cryptées

Avatar de KYoann
KYoann

Bonjour à tous.

Dans mon projet j'ai besoin de crypter les fichiers uploadés. Jusque là, pas trop de souci.

Par contre dans les fichiers qui sont crypter, il y'a des images que j'ai besoin d'afficher dans la vue. Et la par contre je ne sais pas comment faire. Etant donnée que c'est le navigateur qui va chercher un fichier dans un répertoire...

J'ai fait des recherches sans grand succès.

En vous remerciant !

Avatar de bestmomo
bestmomo

Salut,

Tu peux décrypter au chargement de la page en Javascript.

Avatar de KYoann
KYoann

Tu veux dire en ajax ?

Avatar de bestmomo
bestmomo

En fait je me demande comment le navigateur gère cette image cryptée à l'arrivée, évidemment il ne l'affiche pas mais que fait-il du code ?

Avatar de KYoann
KYoann

Le navigateur la télécharge, mais n'arrive pas à l'interpreter.

Quelle est ton idée pour afficher ces images cryptées ?

Avatar de bestmomo
bestmomo

Si tu as accès dans le navigateur au code tu peux toujours trouver une librairie Javascript pour le décrypter.

Avatar de KYoann
KYoann

Mais si je fais cela, ca veux dire que je donne le moyen aux visiteurs de decrypter toutes les photos, et si j'utilise le même chriffrage pour les données en base, la c'est encore pire 😥

Peut etre

Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Dans ce cas, le mieux est de cibler la/les photo(s) a dédrypter dans ton controller et des les traiter avant de les envoyer à la vue. Peut-être peux-tu nous montrer la fonction de ton controller qui envoie les données ..

Avatar de KYoann
KYoann

Je me suis fait cette remarque, les décrypter, puis les renvoyer à la vue.

Mes scripts sont ultra basiques, attention, j'enregistre la version non crypté en plus vue que ca ne marche pas pour le moment.

public function update(Request $request)
    {
        $batiment = Batiment::find($request->id);


        $save_name = false;
        $photo = $request->file('image');

        $test = $photo->get();


        if ($photo != null) {

            $name = Str::random(30);
            $save_name = $name . '.' . $photo->getClientOriginalExtension();
            Image::make($photo)
                ->resize(150, null, function ($constraints) {
                    $constraints->aspectRatio();
                })
                ->save($this->photos_batiment_thumbs . '/' . $save_name);

            $photo->move($this->photos_batiment, $save_name);

            File::delete($this->photos_batiment.''.$batiment->miniature);

            // Ma photo crypté
            $encryptedPhoto = encrypt($test);
            Storage::put('public/batiment/'.$save_name, $encryptedPhoto);

        }


        $batiment->nom = $request->nom;
        $batiment->numero = $request->numero;

        if($save_name != false){
            $batiment->miniature = $save_name;
        }

        $batiment->save();


        return back();

    }

Ma page qui appel tous mes batiments.

public function index()
    {
        $batiments = Batiment::all();

        return view('gestion.batiment.batiment',compact('batiments'));
    }
Avatar de Radekal_Spirits
Radekal_Spirits

avec quoi crypte/decryptes-tu tes images ? l'idée serait sur le front mettre en place une class sur les img cryptées dans le but de créer un eventListener sur ceux ci (afin d'automatiser la procédure) qui contacterait un endpoint qui à l'aide de la clé jwt ou autre servirait à vérifier les droits, afin de permettre le decryptage du fichier sur le serveur et de ne renvoyer q'un URLdata, blob ou binaire afin de l'afficher en background-image ou src d'un img. Ca marcherait aussi si le fichier est décrypté dans le controlleur et passer directement aux différentes vues.

Avatar de KYoann
KYoann

Salut Radekal_Spirits,

Les images sont cryptés avec une méthode d'un package de laravel.

$encryptedPhoto = encrypt($test);
Avatar de CinquièmeDimension
CinquièmeDimension

Pour info, j'ai trouvé ça qui peutpeut-être aider https://stefanzweifel.io/posts/how-to-encrypt-file-uploads-with-laravel/

Avatar de Radekal_Spirits
Radekal_Spirits

Alors la solution proposée dans le lien de CinquièmeDimension correspond bien, a condition de faire des boucles par exemple si tu en a plusieurs sur une même page. Par soucis d'optimisation, tu pourrais charger tes images en lazy load avec ajax en adaptant la solution en question. C'est à dire en renvoyant $decryptedContent en JSON puis en l'inserant dans la source de l'image comment mentionner dans le lien de CinquièmeDimension.

Avatar de KYoann
KYoann

@CinquièmeDimension,

C'est le tuto que j'ai utilisé pour faire le cryptage. Je vais donc regarde pour continuer avec sa méthode pour le décryptage :) comme le propose Radekal_Spirits en JS avec du lazy load, que je n'ai encore jamais expérimenté :)

Vous ne pouvez pas répondre à ce sujet.