Node: Crypto SHA1 - NodeJs v C #

Creado en 16 mar. 2017  ·  3Comentarios  ·  Fuente: nodejs/node

  • Versión : v7.7.2 / v6.10.0
  • Plataforma : Windows 10 - 64 bits
  • Subsistema : búfer


Hola,

Estoy usando el módulo criptográfico para crear hmac usando sha1 para hash, pero cuando escribo un json (en cadena) con palabras que contienen acento, me devuelve un hash diferente de C #, mira:

hash devuelto desde C #
"9XbAUCCZI1hYbgEbVCjpFj0BKt0 ="

hash devuelto por NodeJs
"u2X + a93VC0La + q1o8JTS + ypA1sM ="

Código utilizado en C #:
`` C #
var encoding = new ASCIIEncoding ();
var json = "{\" ciudad \ ": \" São Paulo \ "}";

var bufferSecret = Convert.FromBase64String ("c2VjcmV0IHBhc3M =");
var bufferJson = encoding.GetBytes (json);
var hmac = nuevo HMACSHA1 (bufferSecret);
var hashBytes = hmac.ComputeHash (bufferJson);
var hash = Convert.ToBase64String (hashBytes);


Code used in NodeJs:
```js
let json = JSON.stringify({"city":"São Paulo"});
let bufferSecret = new Buffer(`c2VjcmV0IHBhc3M=`, "base64");
let bufferJson = new Buffer(json, "ascii");
let hash = crypto.createHmac("sha1", bufferSecret).update(bufferJson).digest("base64");

Sí, sé que debo usar la codificación UTF8 en Buffer (pero la API aparentemente solo acepta la codificación ASCII para cifrar el 'mensaje'), pero mire la conversión json a bytes, no (como lo menciona @AdamMajer , gracias) lo mismo:
image
image

Por favor, ¿alguien me puede ayudar? ¿Estoy haciendo algo mal en el código? avíseme si necesita información adicional.
Gracias por adelantado.

buffer question

Comentario más útil

No es lo mismo. Posición 10 ??? Le sugiero que imprima la secuencia de caracteres en un archivo, luego use algo como wdiff para comparar los valores o alguna herramienta similar. Probablemente sea más simple que mirar una captura de pantalla literal o pedirle a otra persona que lo haga por usted.

Todos 3 comentarios

No es lo mismo. Posición 10 ??? Le sugiero que imprima la secuencia de caracteres en un archivo, luego use algo como wdiff para comparar los valores o alguna herramienta similar. Probablemente sea más simple que mirar una captura de pantalla literal o pedirle a otra persona que lo haga por usted.

@AdamMajer gracias por su respuesta.

Sí, tienes razón, la conversión no es la misma, ¿pero no debería? Estoy usando la misma codificación (ascii) para obtener el búfer.

He cambiado la posición 10 por mí mismo y el hash coincide como se esperaba.

Sí, tienes razón, la conversión no es la misma, ¿pero no debería? Estoy usando la misma codificación (ascii) para obtener el búfer.

Sí, y no puede codificar "ã" como ASCII, por eso no funciona. Node le da la codificación Latin-1 de ã en su lugar, y C # le da la codificación (ASCII) de? (como carácter de reemplazo, como ).

Esto no es un error ni un problema con Node.js en sí, así que cerraré este problema. Para preguntas generales sobre el uso de Node.js, como este, nodejs / help puede ser un lugar mejor.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

seishun picture seishun  ·  3Comentarios

Brekmister picture Brekmister  ·  3Comentarios

addaleax picture addaleax  ·  3Comentarios

vsemozhetbyt picture vsemozhetbyt  ·  3Comentarios

fanjunzhi picture fanjunzhi  ·  3Comentarios