Love the tubes..thank you Kiran Patil - base64 won't trick me again :)
Thank God for the tubes!!
I was banging my head against some errors today in some code which seemed pretty straightforward.
- Take some data - encrypt it via 3DES - encode it in base64
- Toss it over to some other system - decode - decrypt.
However, randomly I would fail here:
System.FormatException was unhandled by user code
Message=Invalid length for a Base-64 char array.
Source=mscorlib
StackTrace:
at System.Convert.FromBase64String(String s)
at proofPointTestAuthNServer._Default.Page_Load(Object sender, EventArgs e) in c:\users\spat\documents\visual studio 2010\Projects\TestServer\TestServer\Default.aspx.cs:line 105
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
After spending some time on it I decided to hit the tubes - bang. Kiran Patil hit upon this and blogged about it here:
https://kiranpatils.wordpress.com/2008/03/13/invalid-length-for-a-base-64-char-arrayrijandelmanagedencryption/#comment-707
In case Kiran Patil's site goes away here is his solution which worked like a charm for me:
*********THE SOLUTION**********
Plain Text[My guid] = 72e3f882-9e0e-434f-bf51-28cffc1903c1
Cipher TEXT[generatd by my Encrypt block] = 5NGETiEwyYy3F+P+QnzkRUeB5l7xUTRJuhhGZmFwi5WxCfeo3+kCvTs0z9s+CnZW
Querystring[encrypted guid] = 5NGETiEwyYy3F P QnzkRUeB5l7xUTRJuhhGZmFwi5WxCfeo3 kCvTs0z9s CnZW
Have you seen the change in Querystring???
My Cipher contains "+" and when i pass it in Querystring it " " it passes[space]...
That's the solution dude....
so for solving it just have to change the following block of Decrypt string
byte[] data = Convert.FromBase64String(ciphertext); //OLD ONE
byte[] data = Convert.FromBase64String(ciphertext.Replace(" ","+")); //NEW ONE
Hope it wiill save your time which i had wasted/invested...
Happy Encrypting/Decrypting!!!
Hoorah!!
spatdsg
Comments
Anonymous
November 04, 2010
What sounds to me like a better solution would be to UrlEncode the value placed in the query string, rather than replace char which where UrlDecoded when reading from the query string.Anonymous
December 29, 2010
The client really wasnt a browser for testing - in this case I could not use HttpServerUtility