¿Por qué la clave pública de mi clave privada no genera la dirección pública correcta?

Llave privada:9ccbcabf23e271183dbed503b43277f4c6eee9ac918cd6cda75ebb73ceb35c7d

Dirección pública correspondiente: 0xa73Fb234B1773ed7b115D18A1f0a15579bA2C1e1(compruébelo usted mismo en MyCrypto, por ejemplo)

Se puede generar la clave pública a partir de la clave privada:25b867253fe38ac7ed594f54b4f55fa18c49ced332fc352991e48a77ab7816c759d46cab51a59d9833cd6d958cc752ad95f10bbe469b364db2de5d3535417966

Esta clave pública, sin embargo, no parece producir la dirección pública anterior. En cambio, después de ejecutarlo a través de keccak256, luego tomando los últimos 20 bytes, nos queda:0xaa72e09d258da5496a7e6628e09207ec382e478a

¿Qué estoy haciendo mal?

Respuestas (1)

Debe codificar los bytes de la clave pública (no la cadena de clave pública).

En Javascript https://runkit.com/embed/2w4f7dvkz2lg

keccak256 = require('js-sha3').keccak256;

keccak256(new Buffer('25b867253fe38ac7ed594f54b4f55fa18c49ced332fc352991e48a77ab7816c759d46cab51a59d9833cd6d958cc752ad95f10bbe469b364db2de5d3535417966', 'hex')).slice(24)

"a73fb234b1773ed7b115d18a1f0a15579ba2c1e1"

Observe cómo se coloca la clave pública en un búfer.

Gracias. No estoy trabajando con Javascript, así que este es el problema. Parece que mi algoritmo keccak solo aceptará cadenas. Oye
Si no es obvio, estoy usando PHP. Gemir, lo sé. Puedo convertir la clave pública producida en sus bytes y confirmar que coincidan con lo que ven las bibliotecas JS. Entonces, ahora para pasar esos bytes al algoritmo hash de una manera que sea aceptable, ya que solo manejará cadenas. Intenté simplemente "implosionar" la matriz de bytes en una cadena larga, pero eso no funcionó. ¿Alguna idea inteligente?
Dios santo, lo tengo. Solo hex2bin($publicKey) antes de pasarlo al hash. Alabado sea el Señor. Gracias.
@EvilJordan Siéntase libre de publicar su propia respuesta (PHP) también. (No era nada obvio que estuvieras usando PHP).
@EvilJordan ¡Gracias! Podría besarte los pies ahora mismo jajaja. He estado tratando de averiguar exactamente lo mismo durante 2 días.
Muchos años después, me alertaron sobre alguna actividad sobre esta cuestión. Mi respuesta a todo esto con mi solución completa fue eliminada por mods demasiado entusiastas. Aquí hay un enlace: ethereum.stackexchange.com/questions/39945/… Si ese enlace deja de funcionar, entonces probablemente no haya forma de que estés leyendo esto porque está dentro del mismo intercambio de pila.
@EvilJordan Buen enlace y voté tu respuesta.