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
CryptoJS.SHA256(str),It return this
{ words:
[ 1165750581,
1028330380,
-459297786,
-947376156,
-1078028390,
-767246913,
1573962699,
-482922654 ],
sigBytes: 32 }
Cito:
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-outputvar 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:
psd = base64encode(SHA256(name + base64encode(SHA256($('#password').val())) + g_requestVerificationToken[0]));
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!