示例#1
0
        public Boolean CheckMD5(chave_aut chave)
        {
            if (_body == null)
            {
                _body = new Byte[0];
            }

            header_aut tmp = (header_aut)this.Clone();

            tmp.md5 = new Byte[0];
            tmp.nop = 0;

            Byte[] header  = tmp.ToBytes();
            Byte[] md5calc = new Byte[header.Length + _body.Length];
            Array.Copy(header, 0, md5calc, 0, header.Length);
            Array.Copy(_body, 0, md5calc, header.Length, _body.Length);


            Byte[] msgBuffer = new Byte[16 + 16 + md5calc.Length];
            Array.Copy(chave.akey, 0, msgBuffer, 0, 16);
            Array.Copy(md5calc, 0, msgBuffer, 16, md5calc.Length);
            Array.Copy(chave.akey, 0, msgBuffer, 16 + md5calc.Length, 16);

            md5 md5 = new md5(msgBuffer);

            md5.calc();

            return(BitConverter.ToString(md5.getHash()) == BitConverter.ToString(base.md5));
        }
示例#2
0
文件: AuthBase.cs 项目: radtek/safeid
        private Byte[] _enviapacote(Byte[] dados, Int32 size, ushort op, ushort status)
        {
            header_aut header = new header_aut();

            if (type == AuthType.Server)
            {
                if (++ne == 0xFFFFFFFF)
                {
                    ne = 1;
                }
            }

            header.n        = ne;
            header.operacao = op;
            header.status   = status;
            header.tam_pad  = (ushort)(8 - (size % 8));         /* Calcula tamanho do padding */
            if (header.tam_pad == 8)
            {
                header.tam_pad = 0;
            }
            header.tam_pad  = 0;
            header.tam_pack = size + header.tam_pad + 32; //32 = tamanho do header_aut;
            Int32 bsend = header.tam_pack;

            header.nop = 0;

            Byte[] headerBytes = header.ToBytes();


            if (OnPacketSent != null)
            {
                OnPacketSent(header, dados);
            }


            //Monta o buffer decriptado p/ calculo do md5
            Byte[] md5CalcBuffer = new Byte[headerBytes.Length + size];
            Array.Copy(headerBytes, 0, md5CalcBuffer, 0, headerBytes.Length);
            if (size > 0)
            {
                Array.Copy(dados, 0, md5CalcBuffer, headerBytes.Length, dados.Length);
            }

            //Cacula md5
            Byte[] msgBuffer = new Byte[16 + 16 + md5CalcBuffer.Length];
            Array.Copy(chave.akey, 0, msgBuffer, 0, 16);
            Array.Copy(md5CalcBuffer, 0, msgBuffer, 16, md5CalcBuffer.Length);
            Array.Copy(chave.akey, 0, msgBuffer, 16 + md5CalcBuffer.Length, 16);

            md5 md5 = new md5(msgBuffer);

            md5.calc();
            header.md5 = md5.getHash();
            header.nop = BitConverter.ToUInt16(header.md5, 0);

            //Resgata o header atualizado
            headerBytes = header.ToBytes();

            //Encripta header
            Byte[] encHeader = aut_encripta_buffer(headerBytes, headerBytes.Length, 0, chave);
            Byte[] encBody   = new Byte[0];
            if (size > 0)
            {
                encBody = aut_encripta_buffer(dados, size, htonlInt32(ne), chave);
            }

            Byte[] buffer = new Byte[encHeader.Length + encBody.Length];
            Array.Copy(encHeader, 0, buffer, 0, encHeader.Length);
            if (size > 0)
            {
                Array.Copy(encBody, 0, buffer, encHeader.Length, encBody.Length);
            }

            return(buffer);
        }