Tengo un problema con sumas en hexadecimal

Necesito realizar una suma de un array de 16 bytes y de una palabra que sería un password, al que luego habría que aplicar un algoritmo de cifrado MD5.
Mi problema es que he intentado pasar la cadena de caracteres a un array de bytes, para luego sumarlos byte a byte, pero me encuentro con que el rango de un byte es de -127 a 127 y no se si al sumarlos en decimal, la suma hexadecimal se mantiene y además también tengo la duda que que sucede con el acarreo.
Lo que he intentado hacer es lo siguiente, pero se que no es así:
byte[] challenge=new byte[16];
for (int j=6;j<22;j++) challenge[j-6]=bufferEntrada[j];
String password="world";
byte[] pwd=password.getBytes();
byte[] sumado=new byte[16];
for (int j=0;j<11;j++) sumado[j]=(byte)0;
for (int j=11;j<16;j++) sumado[j]=(byte)(challenge[j]+pwd[j-11]);
MessageDigest md=MessageDigest.getInstance("MD5");
byte[] cifrado=new byte[16];
md.update(sumado);
cifrado = md.digest();

1 Respuesta

Respuesta
1
He estado dándole vueltas durante un buen rato a tu pregunta, sin que se me ocurra nada, ya que todos los métodos de suma que se me pasaban por la cabeza acabarían desbordando la capacidad del tipo de datos byte, por lo que el resultado no seria el correcto.
He estado echándole un vistazo a la clase MessageDigest, que es la que utilizas para obtener el cifrado en md5, y he encontrado que hay una version sobrecargada del método update que te permite especificar la entrada en forma de un array de bytes, justo lo que tienes, e incluso existe una tercera version que te permite especificar que datos debe coger del array de entrada.
void update(byte input)
Updates the digest using the specified byte.
void update(byte[] input)
Updates the digest using the specified array of bytes.
void update(byte[] input, int offset, int len)
Updates the digest using the specified array of bytes, starting at the specified offset.
¿Has probado a utilizar esta version?
Muchas gracias por tu ayuda, aunque al final llamé al soporte del sistema y me comentaron que venía mal el manual, que la suma de bytes no era suma, sino concatenación.
Gracias de todas formas.
Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas