private string Encode(string str) { byte[] buffer = Encoding.Default.GetBytes(str); byte b1, b2, b3, c1, c2, c3, c4; string mes = string.Empty; int count = buffer.Length / 3; int resst = buffer.Length % 3; for (int i = 0; i < count; i++) { int j = i * 3; b1 = buffer[j]; b2 = buffer[j + 1]; b3 = buffer[j + 2]; c1 = (byte)(b1 >> 2); c2 = (byte)(((b1 & 3) << 4) + (b2 >> 4)); c3 = (byte)(((b2 & 15) << 2) + (b3 >> 6)); c4 = (byte)(b3 & 63); mes += GetChar(c1, c2, c3, c4); } if (resst == 1) { b1 = buffer[buffer.Length - 1]; c1 = (byte)(b1 >> 2); c2 = (byte)((b1 & 3) << 4); c3 = 64; c4 = 64; mes += GetChar(c1, c2, c3, c4); } else if (resst == 2) { b1 = buffer[buffer.Length - 2]; b2 = buffer[buffer.Length - 1]; c1 = (byte)(b1 >> 2); c2 = (byte)(((b1 & 3) << 4) + (b2 >> 4)); c3 = (byte)((b2 & 15) << 2); c4 = 64; mes += GetChar(c1, c2, c3, c4); } return mes; } private string Decode(string str) { byte[] buffer = Encoding.Default.GetBytes(str); byte b1, b2, b3, c1, c2, c3, c4; string mes = string.Empty; int count = buffer.Length / 4; int resst = buffer.Length % 4; for (int i = 0; i < count; i++) { int j = i * 4; c1 = GetIndex(buffer[j]); c2 = GetIndex(buffer[j + 1]); c3 = GetIndex(buffer[j + 2]); c4 = GetIndex(buffer[j + 3]); b1 = (byte)((c1 << 2) + (c2 >> 4)); if (c3 != 64 && c4 != 64) { b2 = (byte)(((c2 & 15) << 4) + (c3 >> 2)); b3 = (byte)(((c3 & 3) << 6) + c4); mes += Convert.ToChar(b1); mes += Convert.ToChar(b2); mes += Convert.ToChar(b3); } else if (c3 != 64 && c4 == 64) { b2 = (byte)(((c2 & 15) << 4) + (c3 >> 2)); mes += Convert.ToChar(b1); mes += Convert.ToChar(b2); } else mes += Convert.ToChar(b1); } return mes; } private string GetChar(byte c1, byte c2, byte c3, byte c4) { return new string(new char[] { cs[c1], cs[c2], cs[c3], cs[c4] }); } private byte GetIndex(byte c) { for (byte i = 0; i < cs.Length; i++) { if (c == cs[i]) return i; } return 0; }
private char[] cs = new char[] { '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', '+','/','='};