public static void Main()
SorguDecrypt decrypter = new SorguDecrypt();
string enc = decrypter.Encode("HARUN");
string dec = decrypter.Decode(enc);
Console.WriteLine("{0}: {1}", enc, dec);
public class SorguDecrypt
private char[] outAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/++".ToCharArray();
private char[] inAlphabet = null;
private Encoding turkishEncoding = null;
turkishEncoding = Encoding.GetEncoding("iso-8859-9");
var bytes = Enumerable.Range(0, 255).Select(a => (byte)a).ToArray();
inAlphabet = turkishEncoding.GetChars(bytes);
public string Encode(string clearText)
if (String.IsNullOrEmpty(clearText))
StringBuilder encodedString = new StringBuilder();
clearText = clearText.PadRight(((clearText.Length - 1) / 3 + 1) * 3, (char)0);
for (int j = 0; j < clearText.Length; j += 3)
var bytes = turkishEncoding.GetBytes(clearText.Substring(j, 3));
int c1 = (int)(bytes[0]);
int c2 = (int)(bytes[1]);
int c3 = (int)(bytes[2]);
char ec1 = outAlphabet[k1];
char ec2 = outAlphabet[k3 + k2 * 16];
char ec3 = outAlphabet[k5 + k4 * 4];
char ec4 = outAlphabet[k6];
encodedString.Append(ec1);
encodedString.Append(ec2);
encodedString.Append(ec3);
encodedString.Append(ec4);
return encodedString.ToString();
public string Decode(string cipherText)
if (String.IsNullOrEmpty(cipherText))
StringBuilder decodedString = new StringBuilder();
cipherText = cipherText.PadRight(((cipherText.Length - 1) / 4 + 1) * 4, (char)0);
for (int j = 0; j < cipherText.Length; j += 4)
string s = cipherText.Substring(j, 4);
int c1 = Array.IndexOf(outAlphabet, (s[0]));
int c2 = Array.IndexOf(outAlphabet, (s[1])) + (s[0] == '/' ? 64 : 0);
int c3 = Array.IndexOf(outAlphabet, (s[2])) + (s[1] == '/' ? 64 : 0);
int c4 = Array.IndexOf(outAlphabet, (s[3])) + (s[2] == '/' ? 64 : 0);
int r1 = (c2 * 16) / 255;
int r2 = (c3 * 64) / 255;
char dc1 = inAlphabet[(c1 * 4 + r1)];
char dc2 = inAlphabet[((c2 * 16 + r2) % 256)];
int r3 = Math.Min(254, (c3 - Array.IndexOf(inAlphabet, dc2) % 16 * 4) % 64 * 64 + c4);
char dc3 = c4 != -1 ? inAlphabet[r3] : (char)0;
decodedString.Append((dc1));
decodedString.Append((dc2));
decodedString.Append((dc3));
return decodedString.ToString();
public static void Test()
SorguDecrypt decrypter = new SorguDecrypt();
string enc = decrypter.Encode("DENEME");
string dec = decrypter.Decode(enc);
Console.WriteLine("{0}: {1}", enc, dec);