예제 #1
0
        /// <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 + "==");
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }