2009-05-07 3 views
0

Je suis à la recherche d'un algorithme de cryptage bidirectionnel pour encoder un tableau sous forme de chaîne, afin de pouvoir stocker en toute sécurité certaines données dans un cookie. L'algorithme ne doit pas simplement imploser le tableau, je veux qu'il soit aussi obscurci. Mes données contiennent tous les caractères imprimables.Cryptage du tableau sous forme de chaîne

Un lien vers quelque chose serait suffisant, je n'arrive pas à trouver quoi que ce soit sur Google. Peut-être que je devrais juste imploser le tableau avec un personnage obscur, puis crypter en quelque sorte? Je ne suis pas sûr de la méthode pour crypter avec si ... il n'a pas trop sécurisé, les données de cookie n'est pas que sensibles. Oh ... oui, l'algorithme de chiffrement devrait me laisser utiliser une clé/sel. mcrypt_encrypt semble donner des résultats longs et désordonnés, mais peut-être que je n'utilise pas le bon chiffre. Quel est le chiffrement le plus simple (produit des chaînes propres courtes)?

+1

Ne pas stocker les données cryptées dans les cookies.Si vous devez partager des données entre deux sites Web, stockez un identifiant dans le cookie et demandez à l'autre site Web de demander les données avec un nom d'utilisateur et un mot de passe (en utilisant curl). – OIS

+0

Tout ce que je stocke est un identifiant, et une clé, de sorte que les utilisateurs ne peuvent pas forger le cookie. Je l'obscurcis juste pour faire bonne mesure, alors ils ne savent même pas ce que je stocke. – mpen

+0

L'obfuscation et le cryptage sont totalement différents. Lequel veux-tu? –

Répondre

8

serialize() vont obtenir vos informations à partir d'un tableau à une chaîne - et vous pourriez passer par base64_encode() si vous voulez juste obfuscation - mais pas de sécurité.

Si vous voulez une certaine sécurité - regarder dans mcrypt et Blowfish: blowfish example

+0

ne savait pas à propos de serialize(), merci! – mpen

+0

Je sais que c'est une vieille question, et une vieille réponse, mais juste comme une suggestion à tous les autres chercheurs qui rencontrent cela, vous pouvez envisager d'utiliser [OpenSSL Functions de PHP] (https://secure.php.net/ manual/en/ref.openssl.php) à la place de l'exemple blowfish lié à cette réponse. OpenSSL ajoute la prise en charge intégrée de nombreux algorithmes de chiffrement (notamment Blowfish et AES). De plus, bien que la sécurité ne soit pas une préoccupation majeure pour le PO, l'AES est généralement considéré comme plus sûr que Blowfish, c'est donc le choix préférable. – SpencerD

1

Si la sécurité n'utilise la matière JSON pour encoder le tableau, puis rot13 la chaîne ;-)

+1

Si la sécurité n'a pas d'importance, pourquoi s'embêter avec le cryptage? – TwentyMiles

+0

@TwentyMiles parce que la question initialement mentionné que :-) – lothar

+0

Ce n'est pas un gros problème parce que je prends d'autres mesures de sécurité qui devrait être sacrément difficile à contourner tel quel. De plus, je ne stocke aucune information confidentielle sur mon site Web de toute façon ... en fait, je ne stocke pas beaucoup plus qu'un user_id. – mpen

0

Essayez XOR-ing tous les éléments du tableau stocker le charbon résultant de la chaîne - plus la même à l'envers pour déchiffrer.

0

Si cela n'a pas besoin d'être sécurisé, que ce soit base64, ou rot13, cela peut valoir la peine d'être vu.

2

Je venais d'imploser alors encrypt en utilisant Blowfish ou (pour couci-couça sécurité) DES ou quelque chose ...

+0

Implodez le tableau? Explication ou lien? thx ... – JPhi1618

+0

@ JPhi1618 http://ca3.php.net/manual/fr/fonction.implode.php – mpen

+0

$ str = implode ('abc', array ('1', '2', '3')) // $ str => "1abc2abc3" – Ickmund

4

Utilisez serialize() pour convertir le tableau en une chaîne et unserialize() pour la remettre dans un tableau. C'est de loin supérieur à l'implosion et à l'analyse manuelle. Pour l'obscurcissement simple (que n'importe quel programmeur peut voir à travers) vous pouvez employer l'encodage base64 simple, mais vous devriez vraiment regarder dans la bibliothèque mcrypt pour fournir une vraie sécurité.

La meilleure chose serait probablement de ne pas stocker le tableau dans un cookie du tout. Stockez le tableau dans une variable de session à la place afin que tout l'utilisateur voit jamais est un ID de session. Bien sûr, cela ne fonctionne que si vous avez besoin du tableau juste pour la durée de la session.

Vous dites dans votre commentaire qu'il s'agit d'un cookie "remember me", il s'agit donc d'authentification. Dans ce cas, ne stockez rien de sensible dans le tableau. Il suffit de stocker un hachis salé à la place et l'utiliser. Par exemple, votre cookie peut contenir le nom d'utilisateur et un hachage salé de (mot de passe de base de données hash + adresse IP). Lorsque l'utilisateur arrive sur le site, lisez le cookie et construisez le hachage à partir des informations contenues dans votre base de données. S'il correspond au hash dans le cookie, connectez-le automatiquement. Sinon, supprimez le cookie et prétendez qu'il n'a jamais existé. De cette manière, aucune donnée sensible n'est stockée dans le cookie et vous n'avez pas besoin de le crypter.

+0

ce qui n'est pas le cas :) Je l'utilise pour un cookie 'remember me'. – mpen

6

Sur la base de la réponse de Gnarf, cela devrait faire l'affaire:

function encode_arr($data) { 
    return base64_encode(serialize($data)); 
} 

function decode_arr($data) { 
    return unserialize(base64_decode($data)); 
} 

Juste au cas où quelqu'un d'autre veut une solution de copier-coller.