2010-08-05 4 views
2

J'ai un tableau d'ID (par exemple array(1, 2, 10, 34, 100, 101)) qui représente les ID de fichiers d'images dans la base de données.Recherche de fonctions de cryptage/décryptage

Je voudrais envoyer un lien vers le client par email de telle sorte que quand il appuie sur ce lien il verra les images, mais je ne veux pas que le client voit ces ID de fichiers!

Ainsi, j'ai pensé crypter le tableau d'images avec une clé que le client ne connaît pas, et quand le client clique sur le lien, mon script PHP récupérera la chaîne cryptée, la décryptera sur les images et enverra client une page avec les images.

Y at-il des fonctions PHP intégrées qui peuvent faire le chiffrement/décryptage avec une clé personnalisée pour moi?

Merci!

+0

À quoi cela servirait-il? À un moment donné, le navigateur doit connaître l'URL de l'image affichée. Est-ce juste pour empêcher le client d'entrer d'autres identifiants aléatoires dans une URL pour voir d'autres images? –

+0

Oui, exactement, je ne veux pas que le client voit d'autres photos. Des idées pour éviter cela? –

+1

Votre problème va au-delà des ids obscurcissants, vous avez besoin d'un système d'autorisation approprié qui vérifie réellement si quelqu'un est autorisé à voir quelque chose ou non. Pour ce faire, placez les fichiers dans un endroit inaccessible au public et servez-les via un script qui vérifie les autorisations. – deceze

Répondre

1

PHP a l'extension mcrypt. Cela peut le faire.

Notez que dans la méthode que vous décrivez, le client verra les ID d'image lorsque vous lui envoyez la page.

+0

Vous avez raison. Je n'ai pas pensé à ça. Avez-vous une idée de comment ne pas exposer les images? –

+0

@Misha Moroshko: Vous pourriez avoir un deuxième script PHP qui renvoie les données d'image appropriées, compte tenu de la forme cryptée. Donner à l'utilisateur une page avec des images intégrées pointant vers le deuxième script. Ensuite, les ID ne sont jamais vus. – Borealid

1

Si elle me mettaient en œuvre ce que je venais de donner au client un hachage aléatoire, se rapportent alors que hachage ID particulier dans une table de base de données un peu comme:

link_hash VARCHAR(40) NOT NULL, 
link_id INT(11) NOT NULL 

(une ou plusieurs lignes par link_hash Comme Borealid mentionné dans sa réponse, vous devrez également veiller à ce que lorsqu'ils voient la page, ils ne verront pas les ID dans les URL de l'image non plus. Ce sera un défi distinct.

+0

La méthode OP a l'avantage de nécessiter un espace de stockage constant; Le vôtre nécessite un stockage O (N) pour N = nombre d'images. – Borealid

+0

"Comme Borealid mentionné dans sa réponse, vous devrez également vous assurer que lorsqu'ils verront la page, ils ne verront pas les identifiants dans les URL de l'image non plus. -> bien qui peut être résolu par niggles

+1

Vrai, mais alors ce hachage 'uid' devient aussi bon qu'un ID d'image, donc l'OP peut alors veulent empêcher les gens de voir/partager que les ID. – thomasrutter

2

Que diriez-vous de donner un nom à vos images dans la base de données qui n'est pas le même que l'ID?

Lorsqu'un utilisateur télécharge un fichier, vous donnez au fichier un nom aléatoire comme l'horodatage actuel et md5. Vous stockez le nom dans votre base de données et lui donnez un identifiant. De cette façon, vous obtenez vos identifiants séquentiels et vous obtenez des noms de fichiers qui sont très difficiles à deviner. Cela et empêcher les visiteurs d'afficher le contenu du dossier d'images et vous êtes assez bien défini.

+0

Ceci est la bonne idée - mais ne vous embêtez pas avec les horodatages ou les hachages, générez simplement un nombre aléatoire de 128 bits et utilisez la représentation hexadécimale de cela. Les chances de deviner un nombre correct sont infinitésimales - et équivalent à deviner une clé de chiffrement correcte. – caf