Tuesday, 20 August 2013

decoding issue through Base64

decoding issue through Base64

Hi I'm facing issue while decoding my code works fine at my end but some
times its showing an error like Unexpected code : �
I'll share my encoding and decoding code with you so that i can get some help
public class PasswordCheck {
public static void main(String[] args) {
String salt = "atscene";
String password = RandomStringUtils.randomAlphanumeric(8);
byte[] passwordHash = null;
passwordHash = (salt+password).getBytes();
String str = new String(Base64.encode(passwordHash));
byte[] passwordHash1 = Base64.decode(str);
String pass= new String(passwordHash1);
System.out.println("Random Password: "+password);
System.out.println("Coded password: "+str);
System.out.println(pass.substring(7));
}
}
Base64.java
public class Base64
{
static final char[] charTab =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
public static String encode(byte[] paramArrayOfByte)
{
return encode(paramArrayOfByte, 0, paramArrayOfByte.length,
null).toString();
}
public static StringBuffer encode(byte[] paramArrayOfByte, int
paramInt1, int paramInt2,
StringBuffer paramStringBuffer)
{
int l;
if (paramStringBuffer == null)
paramStringBuffer = new StringBuffer(paramArrayOfByte.length *
3 / 2);
int i = paramInt2 - 3;
int j = paramInt1;
int k = 0;
while (j <= i)
{
l = (paramArrayOfByte[j] & 0xFF) << 16 | (paramArrayOfByte[(j
+ 1)] & 0xFF) << 8
| paramArrayOfByte[(j + 2)] & 0xFF;
paramStringBuffer.append(charTab[(l >> 18 & 0x3F)]);
paramStringBuffer.append(charTab[(l >> 12 & 0x3F)]);
paramStringBuffer.append(charTab[(l >> 6 & 0x3F)]);
paramStringBuffer.append(charTab[(l & 0x3F)]);
j += 3;
if (k++ < 14)
continue;
k = 0;
paramStringBuffer.append("\r\n");
}
if (j == paramInt1 + paramInt2 - 2)
{
l = (paramArrayOfByte[j] & 0xFF) << 16 | (paramArrayOfByte[(j
+ 1)] & 0xFF) << 8;
paramStringBuffer.append(charTab[(l >> 18 & 0x3F)]);
paramStringBuffer.append(charTab[(l >> 12 & 0x3F)]);
paramStringBuffer.append(charTab[(l >> 6 & 0x3F)]);
paramStringBuffer.append("=");
}
else if (j == paramInt1 + paramInt2 - 1)
{
l = (paramArrayOfByte[j] & 0xFF) << 16;
paramStringBuffer.append(charTab[(l >> 18 & 0x3F)]);
paramStringBuffer.append(charTab[(l >> 12 & 0x3F)]);
paramStringBuffer.append("==");
}
return paramStringBuffer;
}
static int decode(char paramChar)
{
if ((paramChar >= 'A') && (paramChar <= 'Z'))
return (paramChar - 'A');
if ((paramChar >= 'a') && (paramChar <= 'z'))
return (paramChar - 'a' + 26);
if ((paramChar >= '0') && (paramChar <= '9'))
return (paramChar - '0' + 26 + 26);
switch (paramChar)
{
case '+':
return 62;
case '/':
return 63;
case '=':
return 0;
}
throw new RuntimeException("unexpected code: " + paramChar);
}
public static byte[] decode(String paramString)
{
ByteArrayOutputStream localByteArrayOutputStream = new
ByteArrayOutputStream();
try
{
decode(paramString, localByteArrayOutputStream);
}
catch (IOException localIOException)
{
throw new RuntimeException();
}
return localByteArrayOutputStream.toByteArray();
}
public static void decode(String paramString, OutputStream
paramOutputStream) throws IOException
{
int i = 0;
int j = paramString.length();
while (true)
{
if ((i < j) && (paramString.charAt(i) <= ' '))
++i;
if (i == j)
return;
int k = (decode(paramString.charAt(i)) << 18) +
(decode(paramString.charAt(i + 1)) << 12)
+ (decode(paramString.charAt(i + 2)) << 6) +
decode(paramString.charAt(i + 3));
paramOutputStream.write(k >> 16 & 0xFF);
if (paramString.charAt(i + 2) == '=')
return;
paramOutputStream.write(k >> 8 & 0xFF);
if (paramString.charAt(i + 3) == '=')
return;
paramOutputStream.write(k & 0xFF);
i += 4;
}
}
}
I'm getting the encoded code as TIspn`VKyg which is not possible to decode
from Base64. and in exception I'm getting Unexpected code: &#65533; .
Please tell me if there is any solution for this issue.

No comments:

Post a Comment