2009-08-19 2 views
2

J'ai utilisé l'algorithme de clé symétrique (Rijndael) (http://www.obviex.com/samples/Encryption.aspx) pendant un certain temps pour crypter un ID. Ensuite, je URL coder la version cryptée de l'ID et le transmettre dans la chaîne de requête. Lorsque je récupère l'ID de la chaîne de requête, l'URL le décode d'abord et je le décrypte.Algorithme de cryptage pour les applications Web

Un problème est survenu récemment. Si l'ID chiffré a à la fois "espaces" et "+" (par exemple "abc ef + g), l'encodage de l'URL change tous les" espaces "en" + "Ceci est un problème lorsque je décode l'ID Je ne sais pas quel "+" était un "+" et lequel "+" était un "espace"

S'il y a une option que je peux choisir le jeu de caractères de sortie pour être seulement l'alphabet (ie l'ID crypté seulement utilise-t-on AZ)? Ou s'il y a un autre algorithme de cryptage bidirectionnel qui a l'option pour moi de choisir le jeu de caractères de sortie?

Ou je suppose que ma dernière option serait de remplacer manuellement "+" dans l'ID crypté avec quelque chose comme "_SPACE_"

Merci

Répondre

0

Vous devez URL encoder votre ID crypté lorsqu'il est passé en tant que paramètres de requête.

Je préfère une version URL de Base64 pour tout ce qui est utilisé dans les paramètres de requête ou les cookies.

+0

J'utilise HttpUtility.UrlEncode() pour urlencoder mon ID crypté. Si mon ID chiffré est "abc e +", l'ID codé par l'URL est "abc + e +". Comment est-ce que je décrypte l'URL "abc + e +" plus tard? – David

+0

Votre UrlEncode() est erroné. Il devrait produire "abc + e% 2b". + devrait toujours être encodé. De plus, vous ne devriez pas utiliser d'espace dans l'ID. Ce devrait être une chaîne encodée en Base64. –

+0

Oui, vous avez raison. Il s'est avéré que le problème était que j'obtenais la chaîne de requête avec HttpUtility.ParseQueryString(), qui urldecodes déjà le Querstring. J'ai également appelé HttpUtility.URLDecode(). J'ai donc fini par urlecoder deux fois. – David

0

Eh bien, pour répondre à votre question à un niveau de base: Oui, encoder le résultat chiffré en base64.

Mais je dois avouer que je suis plutôt préoccupé par votre approche en général.

+1

Que puis-je faire pour transmettre un ID chiffré dans la chaîne de requête? – David

+0

Eh bien votre méthode est assez bien, mais je me demande juste pourquoi vous utilisez une approche comme celle-ci, par opposition à dire simplement un système de connexion général pour déterminer qui peut le faire. –

+0

Cet ID n'est pas un ID utilisateur. C'est un PK d'une table dans ma base de données. Pour des raisons de sécurité, je ne veux pas que l'utilisateur connaisse l'identifiant exact. – David

0

vous devriez jeter un oeil à la façon dont j'ai décidé de gérer ma façon de id cacher (dans mon cas guid, mais peut être une chaîne cryptée)

link

0

Pouvez-vous encoder manuellement l'URL afin que les espaces soient remplacés par %20 au lieu de +?

+0

Merci. Je pense que je remplacerai aussi + avec% 2B manuellement. – David