/// <summary> /// Codifica para Base64 /// </summary> /// <param name="strIn">Sting a ser codificada</param> /// <returns>string codificada</returns> public static string Encode(string strIn) { int c1, c2, c3, w1, w2, w3, w4, n; string strOut = ""; for (n = 0; n < strIn.Length; n += 3) { c1 = 0; c2 = 0; c3 = 0; w1 = -1; w2 = -1; w3 = -1; w4 = -1; c1 = Utility.Asc(strIn.Substring(n, 1)); if (n + 1 < strIn.Length) { c2 = Utility.Asc(strIn.Substring(n + 1, 1)); } if (n + 2 < strIn.Length) { c3 = Utility.Asc(strIn.Substring(n + 2, 1)); } w1 = Convert.ToInt32(c1 / 4); w2 = (c1 & 3) * 16 + Convert.ToInt32(c2 / 16); if (strIn.Length >= n + 2) { w3 = (c2 & 15) * 4 + Convert.ToInt32(c3 / 64); } if (strIn.Length >= n + 3) { w4 = (c3 & 63); } strOut += MimeEncode(w1) + MimeEncode(w2) + MimeEncode(w3) + MimeEncode(w4); } return(strOut + "=="); }
/// <summary> /// Encripta a string /// </summary> /// <param name="St">string a ser encriptada</param> /// <param name="Pw">Chave de encriptação</param> /// <returns>String encriptada</returns> private static string Cript(string St, string Pw) { string x = ""; int i; int n = 0; int p; int j = 0; p = 0; for (i = 0; i < St.Length; i++) { if (p >= Pw.Length) { p = 0; } j = Utility.Asc(Pw.Substring(p, 1)) | 128; n = Utility.Asc(St.Substring(i)); p = p + 1; DeNovo: n = n ^ j; if (n < 31) { n = (128 + n); goto DeNovo; } else if (n > 127 && n < 159) { n = n - 128; goto DeNovo; } x = x + Utility.Chr(n); } return(x); }
/// <summary> /// Função para desencriptação de string /// </summary> /// <param name="Exp">String a ser codificada</param> /// <param name="Chv">Chave para ser usada na codificação</param> /// <returns>retorna a string decriptada</returns> static public string S002(string Exp, string Chv) { string RetVal, z, ExpChv; string[] Dados; int j, i, Cont, t, ContChv, k, ContIni; byte bit; t = Exp.Length; Dados = new string[t]; ExpChv = ""; //vamos montar a chave para encriptação for (i = 0; i < Chv.Length; i++) { for (j = 7; j >= 0; j--) { bit = Convert.ToByte((Utility.Asc(Chv.Substring(i, 1)) & (long)Math.Pow(2, j)) != 0); ExpChv += Convert.ToString(bit); } } //desfaz o xor com a chave (a posição de chave que deverá ser utilizada para desencriptar cada byte deverá ser: 13570246) ContChv = 0; for (i = 0; i < Exp.Length; i++) { z = ""; ContIni = ContChv; ContChv += 1; if (ContChv == ExpChv.Length) { ContChv = 0; } for (j = 0; j <= 7; j++) { bit = Convert.ToByte(Convert.ToInt32((Utility.Asc(Exp.Substring(i, 1)) & (long)Math.Pow(2, j)) != 0) ^ Convert.ToInt32(ExpChv.Substring(ContChv, 1))); z = z + Convert.ToString(bit); if (j == 3) { ContChv = ContIni; } else { for (k = 1; k <= 2; k++) { ContChv += 1; if (ContChv == ExpChv.Length) { ContChv = 0; } } } } Utility.ChangeStr(ref Exp, i, Utility.Chr(RetAsc(z))); } //agora vamos corrigir a posição de cada bit for (Cont = 0; Cont < t; Cont++) { for (j = 7; j >= 0; j--) { // se ímpar... if ((j & 1) != 0) { // calcula bit original i = (7 - Convert.ToInt32(j / 2)); // usa primeiro char bit = Convert.ToByte(Convert.ToInt32(Utility.Asc(Exp.Substring(Cont, 1)) & (long)Math.Pow(2, i)) != 0); } // par else { // calcula bit original... i = 3 - (j / 2); // usa último char bit = Convert.ToByte(Convert.ToInt32(Utility.Asc(Exp.Substring(t - Cont - 1, 1)) & (long)Math.Pow(2, i)) != 0); } Dados[Cont] = Convert.ToString(bit) + Dados[Cont]; } } //agora vamos montar a string já desencriptada para retorno RetVal = ""; for (i = 0; i < t; i++) { RetVal += Utility.Chr(RetAsc(Dados[i])); } return(RetVal); }
/// <summary> /// Função para encriptação de string /// </summary> /// <param name="Exp">String a ser codificada</param> /// <param name="Chv">Chave para ser usada na codificação</param> /// <returns>Retorna a string encriptada</returns> public static string S001(string Exp, string Chv) { string RetVal, ExpChv, pi, pp; int i, j, Cont, t, ContChv; string[] Dados; byte bit; t = Exp.Length; Dados = new string[t]; ExpChv = ""; //vamos montar a chave para encriptação for (i = 0; i < Chv.Length; i++) { for (j = 7; j >= 0; j--) { bit = Convert.ToByte((Utility.Asc(Chv.Substring(i, 1)) & (long)Math.Pow(2, j)) != 0); ExpChv += Convert.ToString(bit); } } //vamos misturar os bits da string ContChv = 0; for (Cont = 0; Cont < t; Cont++) { pp = ""; pi = ""; for (j = 7; j >= 0; j--) { // se ímpar... if ((j & 1) != 0) { //usa o primeiro char bit = Convert.ToByte(((Utility.Asc(Exp.Substring(Cont, 1)) & (long)Math.Pow(2, j)) != 0) ^ (Convert.ToInt32(ExpChv.Substring(ContChv, 1)) != 0)); pi += Convert.ToString(bit); } // par else { // usa o último char bit = Convert.ToByte(((Utility.Asc(Exp.Substring(t - Cont - 1, 1)) & (long)Math.Pow(2, j)) != 0) ^ (Convert.ToInt32(ExpChv.Substring(ContChv, 1)) != 0)); pp += Convert.ToString(bit); } ContChv += 1; if (ContChv == ExpChv.Length) { ContChv = 0; } } Dados[Cont] = (pp + pi); } //agora vamos montar a string já encriptada para retorno RetVal = ""; for (i = 0; i < t; i++) { RetVal += Utility.Chr(RetAsc(Dados[i])); } return(RetVal); }