/// <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); }