After Converting a string from Base64 some characters are nothing.

  • Thread starter Thread starter Jeremy Kitchen
  • Start date Start date
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
 
DecodeBase64 does nothing ? You probably forgot to a call to the
appropriate FromBase64 method...
 
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.
 
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...
 
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
 
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
 
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 :)
 
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
 
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
 
Back
Top