Base64 Encoding

Encodes data with MIME base64. This encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean, such as mail bodies.



									public static char[] Base64Encoding(byte[] data)
{
	int length, length2;
	int blockCount;
	int paddingCount;

	length = data.Length;

	if ((length % 3) == 0)
	{
		paddingCount = 0;
		blockCount = length / 3;
	}
	else
	{
		paddingCount = 3 - (length % 3);
		blockCount = (length + paddingCount) / 3;
	}

	length2 = length + paddingCount;

	byte[] source2;
	source2 = new byte[length2];

	for (int x = 0; x < length2; x++)
	{
		if (x < length)
		{
			source2[x] = data[x];
		}
		else
		{
			source2[x] = 0;
		}
	}

	byte b1, b2, b3;
	byte temp, temp1, temp2, temp3, temp4;
	byte[] buffer = new byte[blockCount * 4];
	char[] result = new char[blockCount * 4];

	for (int x = 0; x < blockCount; x++)
	{
		b1 = source2[x * 3];
		b2 = source2[x * 3 + 1];
		b3 = source2[x * 3 + 2];

		temp1 = (byte)((b1 & 252) >> 2);

		temp = (byte)((b1 & 3) << 4);
		temp2 = (byte)((b2 & 240) >> 4);
		temp2 += temp;

		temp = (byte)((b2 & 15) << 2);
		temp3 = (byte)((b3 & 192) >> 6);
		temp3 += temp;

		temp4 = (byte)(b3 & 63);

		buffer[x * 4] = temp1;
		buffer[x * 4 + 1] = temp2;
		buffer[x * 4 + 2] = temp3;
		buffer[x * 4 + 3] = temp4;

	}

	for (int x = 0; x < blockCount * 4; x++)
	{
		result[x] = SixBitToChar(buffer[x]);
	}

	switch (paddingCount)
	{
		case 0:
			break;
		case 1:
			result[blockCount * 4 - 1] = '=';
			break;
		case 2:
			result[blockCount * 4 - 1] = '=';
			result[blockCount * 4 - 2] = '=';
			break;
		default:
			break;
	}

	return result;
}

private static char SixBitToChar(byte b)
{
	char[] lookupTable = new char[64] {
		'A','B','C','D','E','F','G','H','I','J','K','L','M',
		'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
		'a','b','c','d','e','f','g','h','i','j','k','l','m',
		'n','o','p','q','r','s','t','u','v','w','x','y','z',
		'0','1','2','3','4','5','6','7','8','9','+','/'
	};

	if ((b >= 0) && (b <= 63))
	{
		return lookupTable[(int)b];
	}
	else
	{
		return ' ';
	}
}
								


Example

									byte[] data = System.Text.Encoding.Default.GetBytes("jdfgsdhfsdfsd 6445dsfsd7fg/*/+bfjsdgf%$^");
char[] value = Base64Encoding(data);
								


Output

									amRmZ3NkaGZzZGZzZCA2NDQ1ZHNmc2Q3ZmcvKi8rYmZqc2RnZiUkXg==