1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Computar um array de bytes com .digest no android

Pessoal este é meu código:

package com.example.teste_gerador_registro;

    import java.io.UnsupportedEncodingException;
    import java.nio.ByteBuffer;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;

    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;


    public class MainActivity extends Activity implements OnClickListener {

        Button B1;
        TextView mostra;
        EditText cod;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            B1 = (Button)findViewById(R.id.button1);
            B1.setOnClickListener(this);

            mostra=(TextView)findViewById(R.id.textView1);

            cod=(EditText)findViewById(R.id.editText1);
        }

        public String GenerateRegCod (String[] Code, String Hash) throws NoSuchAlgorithmException, UnsupportedEncodingException
        {
            int i;

            //Cria a criptografia MD5
            MessageDigest md5 = MessageDigest.getInstance("MD5");    

            String newCode = "";        

            //For para tirar os "-"
            for(i = 0; i < Code.length; i++)
            {
                char c = Code[i].charAt(0); 
                if(c != '-'){
                    newCode += Code[i].toString();
                }
            }

            newCode = newCode.toUpperCase();

            //Verifica se a variável newCode contém somente os 16 caracteres hexa da variável Code
            if(newCode.length() != 16)
            {
                //Mostra mensagem: código inválido
                AlertDialog alerta;
                //Cria o gerador do AlertDialog
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                //define o titulo
                builder.setTitle("Erro");
                //define a mensagem
                builder.setMessage("Código inválido.");
                //define um botão como positivo
                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {          
                       //conteudo do botão
                    }
                });
                //cria o AlertDialog
                alerta = builder.create();
                //Exibe
                alerta.show();

                return "";
            }

            byte[] appDeviceID = newCode.getBytes("ASCII");

            byte[] appCodeToHash = Hash.getBytes("ASCII");


            if(appCodeToHash.length < appDeviceID.length)
                return "";

            byte[] toHash = new byte[appDeviceID.length * 2];

            for(i = 0; i < appDeviceID.length; i++)
            {
                toHash[i * 2] = appDeviceID[i];
                toHash[i * 2 + 1] = appCodeToHash[i];
            }


            byte[] dataRegCodeToCompare = md5.digest(toHash);

            StringBuffer hexString = new StringBuffer();

            for (i=0; i<dataRegCodeToCompare.length; i++)
            hexString.append(Integer.toHexString(0xFF & dataRegCodeToCompare[i]));

            String s = String.valueOf(hexString);

            StringBuilder sb = new StringBuilder();

            for(i = 0; i < s.length(); i+=3)
            {
                sb.append(s.substring(i+1,i+2)); // vamos usar somente a segunda parte
            }

            return sb.toString();        
        }

        @Override
        public void onClick(View v) {
            // TODO Stub de método gerado automaticamente

            String cod1 = cod.getText().toString();

                String[] cod2 = new String[cod1.length()];
                for (int i = 0; i < cod1.length(); i++) {
                    cod2[i] = (cod1.substring(i,i+1));
                }    

                try {
                    mostra.setText(this.GenerateRegCod(cod2,"PRINCIPIODACORRESPONDENCIA"));
                } catch (NoSuchAlgorithmException e) {
                    // TODO Bloco catch gerado automaticamente
                    e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
                    // TODO Bloco catch gerado automaticamente
                    e.printStackTrace();
                }
        }

    }

E está dando erro na hora de computar o valor de toHash.

Eu já tenho uma tabela pronta dos valores de toHash e dataRegCodeToCompare que tem que sair mas, os calculados e inseridos em dataRegCodeToCompare não estão batendo.

Segue os valores de toHash:[52, 80, 69, 82, 68, 73, 57, 78, 69, 67, 56, 73, 56, 80, 49, 73, 53, 79, 48, 68, 65, 65, 51, 67, 52, 79, 50, 82, 53, 82, 65, 69]

Segue os valores de dataRegCodeToCompare:[43, 252, 237, 75, 30, 238, 188, 243, 213, 203, 78, 212, 226, 27, 49, 241]

E estes são os valores de dataRegCodeToCompare que estão saindo:[43, -4, -19, 75, 30, -18, -68, -13, -43, -53, 78, -44, -30, 27, 49, -15]

Alguns valores estão até negativos. Tentei mudar para um array de int mas na hora de "dar" o digest ele so aceita array de byte.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android criptografia hash eclipse ou faça a sua própria pergunta.