elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Foros Generales
| |-+  Dudas Generales (Moderador: engel lex)
| | |-+  XOR entre enteros llega al mismo resultado que entre bytes? (Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: XOR entre enteros llega al mismo resultado que entre bytes? (Solucionado)  (Leído 3,329 veces)
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
XOR entre enteros llega al mismo resultado que entre bytes? (Solucionado)
« en: 5 Enero 2020, 05:26 am »

He estado algo estancado con la siguiente duda.

El operador ^ es un XOR, un código de javascript lo aplica asi.

Código
  1. for (var i = 0; i < ckey.sigBytes/4; i += 1) {
  2. ckey.words[i] = ckey.words[i] ^ csig.words[i]
  3. }

Donde words son números enteros signed de 32 bits, sigBytes son vale 32,  La api de javascript lo maneja de esa forma, en PHP yo tengo el binstring de 32 bytes (raw de un hash sha256) ¿si yo realizo el XOR a los bytes individuales uno a uno llego al mismo resultado?

Ejemplo.
Código
  1. while($i < 32) {
  2. $ckey[$i] = $ckey[$i] ^ $csig[$i];
  3. $i++;
  4. }

Creo que la pregunta es algo boba, pero a esta altura del dia ya no tengo cabeza para  responderme yo mismo.

Saludos!


Solucionado

Si es lo mismo, todo depende que las variables evaluadas sean del mismo tamaño. Como comenta MinusFour.

Saludos!


« Última modificación: 5 Enero 2020, 19:21 pm por AlbertoBSD » En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: XOR entre enteros llega al mismo resultado que entre bytes?
« Respuesta #1 en: 5 Enero 2020, 07:47 am »

He estado algo estancado con la siguiente duda.

El operador ^ es un XOR, un código de javascript lo aplica asi.

Código
  1. for (var i = 0; i < ckey.sigBytes/4; i += 1) {
  2. ckey.words[i] = ckey.words[i] ^ csig.words[i]
  3. }

Donde words son números enteros signed de 32 bits, sigBytes son vale 32,  La api de javascript lo maneja de esa forma, en PHP yo tengo el binstring de 32 bytes (raw de un hash sha256) ¿si yo realizo el XOR a los bytes individuales uno a uno llego al mismo resultado?

Ejemplo.
Código
  1. while($i < 32) {
  2. $ckey[$i] = $ckey[$i] ^ $csig[$i];
  3. $i++;
  4. }

Creo que la pregunta es algo boba, pero a esta altura del dia ya no tengo cabeza para  responderme yo mismo.

Saludos!
Es lo mismo creo yo. Solo que en js son 32 bits y en php 32 bytes.
En js divide entre 4 y obtiene 8 bits(1byte) y entonces le aplica xor. En PHP tu ya tienes el byte y le aplicas xor. Creo que es lo mismo porque en ambos bucles se aplica internamente el Xor bit a bit y ambas aplican xor de un byte con el siguiente.

Por cierto, releyendo el título de tu pregunta, en JS no hay enteros. Son todo floats https://en.m.wikipedia.org/wiki/IEEE_754

Si por enteros te refieres a decimales, es lo mismo.


« Última modificación: 5 Enero 2020, 08:01 am por @?0!,5^34 » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: XOR entre enteros llega al mismo resultado que entre bytes?
« Respuesta #2 en: 5 Enero 2020, 15:55 pm »

Siempre y cuando las dos fuentes y los operadores sean del mismo tamaño y no excedan el tamaño máximo del operador deberían ser lo mismo.

El operador xor no necesita información de otros bits alrededor. Es lo mismo hacer:

Código:
11111111
^
00000000

Que:

Código:
1  1  1  1  1  1  1  1
^  ^  ^  ^  ^  ^  ^  ^
0  0  0  0  0  0  0  0

o

Código:

11  11  11  11
^   ^   ^   ^
00  00  00  00

o

Código:

1111  1111
^     ^
0000  0000

Etc, etc...

Lo único que debe preocuparte es la conversión que pudiera hacer los operadores y que termine truncando o modificando alguno de los operadores.
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: XOR entre enteros llega al mismo resultado que entre bytes?
« Respuesta #3 en: 5 Enero 2020, 19:19 pm »

Es lo mismo creo yo. Solo que en js son 32 bits y en php 32 bytes.
En js divide entre 4 y obtiene 8 bits(1byte) y entonces le aplica xor. En PHP tu ya tienes el byte y le aplicas xor. Creo que es lo mismo porque en ambos bucles se aplica internamente el Xor bit a bit y ambas aplican xor de un byte con el siguiente.

Si ya despues de dormir algo, estoy seguro que si siempre y cuando se cumpla lo que dince MinusFour

Siempre y cuando las dos fuentes y los operadores sean del mismo tamaño y no excedan el tamaño máximo del operador deberían ser lo mismo.

El operador xor no necesita información de otros bits alrededor.

Un poco de contexto, las variables del javascript que se están evaluando se supone que es el resultado de un hash sha256 de la librería CryptoJS

Pero esta libreria tiene una forma algo rara o simple de manjar los datos. Segun lei devuelve un objeto con un array de words y la variable sigBytes

Código:
CryptoJS.SHA256(str),It return this
{ words:
[ 1165750581,
1028330380,
-459297786,
-947376156,
-1078028390,
-767246913,
1573962699,
-482922654 ],
sigBytes: 32 }

Cito:

Citar
The hash you get back isn't a string yet. It's a WordArray object. When you use a WordArray object in a string context, it's automatically converted to a hex string.
var hash = CryptoJS.SHA256("Message");

https://cryptojs.gitbook.io/docs/#the-hashing-output

Código:
var hash = CryptoJS.SHA256("Message");

typeof hash
> "object";

hash
> "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91";

Voy a depurar un poco ya que estoy reverseando el login de un Modem 4G y utiliza mucha "Seguridad a través de la oscuridad" cosas asi feas como:

Código
  1. psd = base64encode(SHA256(name + base64encode(SHA256($('#password').val())) + g_requestVerificationToken[0]));

Código
  1. var authMsg = firstNonce + "," + finalNonce + "," + finalNonce;

Voy a depurar por que en alguno de los pasos intermedios no me esta dando el mismo resultado y no llego al mismo token producido por el javascript.

Muchas gracias por sus respuesta.

Saludos!
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: XOR entre enteros llega al mismo resultado que entre bytes? (Solucionado)
« Respuesta #4 en: 5 Enero 2020, 19:24 pm »

Las operaciones buleanas son 'atómicas'. Se aplican bit a bit, así que no importa la cantidad de bits de los operandos.

Las operaciones aritméticas en cambio, producen acarreos y desbordamientos, es decir una operación aplicada a un bit, puede implicar (un cambio) al bit anterior o posterior. Nunca es el caso de las operaciones buleanas.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
diferencias entre flujo de caracteres y flujos de bytes
Java
darkxxx 3 7,785 Último mensaje 4 Junio 2009, 11:13 am
por ~~
programa para snifar paquetes entre programas del mismo ordenador.
Software
skan 0 1,763 Último mensaje 23 Julio 2010, 13:09 pm
por skan
Cual es la relacion entre el user y el resultado
Ingeniería Inversa
claros10 5 3,295 Último mensaje 5 Abril 2011, 23:28 pm
por claros10
Confusión entre medidas bytes y bits
Dudas Generales
gregory90 8 10,884 Último mensaje 5 Julio 2011, 17:50 pm
por gregory90
Enmascaramiento para acceso pptp entre dos redes con mismo rango de ips
Redes
djlevi 0 1,971 Último mensaje 3 Marzo 2014, 13:21 pm
por djlevi
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines