After Converting a string from Base64 some characters are nothing.

J

Jeremy Kitchen

I have encoded a string into Base64 for the purpose of encryption. I
then later decrypted it and converted it back from Base64 the final
string returns with four nothing characters.

"pass" what the result should be
"pass____ what the result is where each underline char is a nothing
char.

I am about to write a function that will remove the nothing chars butI
would like to know what is causing the problem and simply avoid it
instead.

Encoding code:

Private Shared Function EncodeBase64(ByVal message As String) As
String
Dim encodeBuffer As Byte() =
System.Text.Encoding.Unicode.GetBytes(message)
Return Convert.ToBase64String(encodeBuffer)
End Function

Decoding Code:

Private Shared Function DecodeBase64(ByVal decodeBuffer As Byte()) As
String
Return System.Text.Encoding.Unicode.GetString(decodeBuffer)
End Function

I believe that the encryption is working as intended

DecodeBase64(Decrypt(password, crypto)) is the line that returns the
wrong string.

Thanks for any help
Jeremy
 
P

Patrice

DecodeBase64 does nothing ? You probably forgot to a call to the
appropriate FromBase64 method...
 
B

Branco Medeiros

Jeremy Kitchen wrote:
<backposted/>

I've seen encryption algorythms that require the plain text size as a
multiple of some value to work properly. Did you check the encryption
with a text the same size of the Base64 encoded string to see if it's
not automatically padding your text? (wild, wild guess, I know)

HTH.

Regards,

Branco.
 
P

Patrice

Also I find a bit weird that you actually see something that is almost the
original string. Base64 should produce a much more different string.

That plus the fact that the encoding function returns a string and that the
decoding function accept a buffer would make me think that you perhaps still
have a problem between those two functions calls...
 
J

Jeremy Kitchen

DecodeBase64 does nothing ? You probably forgot to a call to the
appropriate FromBase64 method...

That isn't my problem it works it is just that chars with the value
of nothing are appended to what should be the result. This doens't
happen if i call the function in immediate mode. It does happen when I
assign the result to a value.

I eventually wrote the following code to get around the problem but I
would like to avoid having it in the first place.

Cleaner Code:
Private Shared Function CleanStringOfNothings(ByVal unclean As String)
As String
Dim clean As New StringBuilder(unclean.Length)
For Each c As Char In unclean
If c <> Nothing Then
clean.Append(c)
End If
Next
Return clean.ToString
End Function
 
J

Jeremy Kitchen

Also I find a bit weird that you actually see something that is almost the
original string. Base64 should produce a much more different string.

That plus the fact that the encoding function returns a string and that the
decoding function accept a buffer would make me think that you perhaps still
have a problem between those two functions calls...


I also have an overload of the Decode that accepts a string.

Here both decode functions are.
Private Shared Function DecodeBase64(ByVal message As String) As
String
Dim decodeBuffer As Byte() = Convert.FromBase64String(message)
Return DecodeBase64(decodeBuffer)
End Function

Private Shared Function DecodeBase64(ByVal decodeBuffer As Byte()) As
String
Return
CleanStringOfNothings(System.Text.Encoding.Unicode.GetString(decodeBuffer))
End Function
 
T

Tom Shelton

Jeremy Kitchen wrote:

<backposted/>

I've seen encryption algorythms that require the plain text size as a
multiple of some value to work properly. Did you check the encryption
with a text the same size of the Base64 encoded string to see if it's
not automatically padding your text? (wild, wild guess, I know)

HTH.

Regards,

Branco.

Branco - I don't think that is a wild guess at all. In fact, it was
the very though I had when reading the original post. I believe if
the OP checks his algorithm he will find that this is the root of his
issue (I've had the same thing happen to me :)
 
J

Jeremy Kitchen

Branco - I don't think that is a wild guess at all. In fact, it was
the very though I had when reading the original post. I believe if
the OP checks his algorithm he will find that this is the root of his
issue (I've had the same thing happen to me :)


Tom I checked the encryption and I am indeed padding zero bytes in the
encryption.

Thanks
 
P

Patrice

So try :
MsgBox(DecodeBase64(EncodeBase64("pass")) = "pass")

Return True here so it doesn't look like the problem is the base64
encoding/decoding part. If you try a longer word would you have always twice
the number of characters ? (unicode vs ansi problem ?).

--
Patrice

"Jeremy Kitchen" <[email protected]> a écrit dans le message de (e-mail address removed)...
Also I find a bit weird that you actually see something that is almost the
original string. Base64 should produce a much more different string.

That plus the fact that the encoding function returns a string and that
the
decoding function accept a buffer would make me think that you perhaps
still
have a problem between those two functions calls...


I also have an overload of the Decode that accepts a string.

Here both decode functions are.
Private Shared Function DecodeBase64(ByVal message As String) As
String
Dim decodeBuffer As Byte() = Convert.FromBase64String(message)
Return DecodeBase64(decodeBuffer)
End Function

Private Shared Function DecodeBase64(ByVal decodeBuffer As Byte()) As
String
Return
CleanStringOfNothings(System.Text.Encoding.Unicode.GetString(decodeBuffer))
End Function
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top