I have a problem dealing with encrypted URL parameters when applying HttpUtility.UrlEncode or UrlDecode.
for a given url string: ?fid=7kqguwhYMNw=&uid=YCRSGG71+58=
the PLUS sign which is part of the encrypted data of uid is stripped out and replaced with a space so my attempts to decrypt it fail.
OK, so I know that the + is a reserved shorthand for space in QUERYSTRING(RFC 1630) but since I don’t have too much control over the value that is returned from encryption how can I get around this.
EDIT:
OK, so good point brought up. Ignore the UrlEncode/UrlDecode part of the question. Request.QueryString([“uid”]) will still have the plus sign stripped out of it when I pass it to my decryption method.
The Base-64 encoded value needs to be URL-encoded before it is put in the URL. If I do
HttpUtility.UrlEncode("YCRSGG71+58=")then I getYCRSGG71%2b58%3d– which has no plus signs, and can be correctly decoded.In other words, the code that is putting a base-64 value on the URL without encoding it first is wrong. If you control that code, you should change it. If you don’t control that code, then don’t try to decode something that wasn’t url-encoded in the first place.