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 !

Posté il y a 6 mois
Avatar de bestmomo
bestmomo

Salut,

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

Posté il y a 6 mois
Avatar de KYoann
KYoann

Tu veux dire en ajax ?

Posté il y a 6 mois
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 ?

Posté il y a 6 mois
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 ?

Posté il y a 6 mois
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.

Posté il y a 6 mois
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

Posté il y a 6 mois
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 ..

Posté il y a 6 mois
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'));
    }
Posté il y a 6 mois
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.

Posté il y a 6 mois
Avatar de KYoann
KYoann

Salut Radekal_Spirits,

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

$encryptedPhoto = encrypt($test);
Posté il y a 6 mois
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/

Posté il y a 6 mois
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.

Posté il y a 6 mois
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é :)

Posté il y a 6 mois

Vous ne pouvez pas répondre à ce sujet.