¿Cómo puedo probar y verificar una llave personalizada antes de enviarle monedas?

Ejecuté vanitygen y oclvanitygen en la misma máquina, y después de mi ejecución me di cuenta de que ambos exe comparten el mismo archivo de salida.

He tenido experiencia en el pasado en la que muchos programas agregan al mismo archivo TXT que podría dañarse.

Independientemente del origen de la corrupción, ¿cuál es la forma más completa de validar una clave creada por vanitygen?

Actualizar

Agregué la etiqueta de desarrollador ya que estoy buscando hacer una validación masiva. Los scripts de línea de comandos también funcionan.

Respuestas (4)

Si no desea hacerlo en línea, puede intentar importar la clave privada a Bitcoin-Qt y luego ver si la clave pública coincidente es la que esperaba.

Openssl se puede utilizar para convertir claves privadas en claves públicas. El siguiente comando le proporciona la clave pública de una clave privada conocida. La clave privada debe tener la forma de un archivo PEM:

$ gato clave_privada.pem

-----COMENZAR CLAVE PRIVADA EC-----
MHQCAQEEIMURrYd6CTHlrrV0JOxnze9ldaq3mRYMnYJ8195GldAVoAcGBSuBBAAK
oUQDQgAEANPTV3v+8AMXniPaerOWziyc6tHbmbhORhbVKv1ACYuO+ohlFaV6QaOz
/AGjoSXV0ZeKxq7FijsAdBzeu23Fgg==
-----FIN EC CLAVE PRIVADA-----

Nota: si tiene una clave privada en formato hexadecimal, debe convertirla a formato PEM, utilizando el procedimiento de esta respuesta .

Para obtener la clave pública de la clave privada usamos openssl:

$ abre SSL ec -pubout /dev/null

-----INICIAR CLAVE PÚBLICA-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEANPTV3v+8AMXnIPaerOWziyc6tHbmbhO
RhbVKv1ACYuO+ohlFaV6QaOz/AGjoSXV0ZeKxq7FijsAdBzeu23Fgg==
-----FIN CLAVE PÚBLICA-----

Para convertir una clave pública en una dirección de bitcoin, necesitamos algunos pasos :

Primero necesitamos calcular el hash160 de la clave pública. Esto puede hacerse de la siguiente manera:

$ abre SSL ec -pubout /dev/null |
  openssl ec -pubin -pubout -outform DER 2>/dev/null |
  cola -c 65 |
  openssl dgst -sha256 -binario |
  openssl dgst -rmd160 -binario |
  xxd -p -c 80

ab085c55b735d4a811df3f55e6508634f1ce1e27

Luego, el hash160 debe usarse para calcular la suma de verificación de la siguiente manera:

$ echo -n "ab085c55b735d4a811df3f55e6508634f1ce1e27" |
  xxd-p-r |
  openssl dgst -sha256 -binario |
  openssl dgst -sha256 -binario |
  xxd -p -c 80 |
  cabeza -c 8

7801f8dc

El hash160, combinado con el checksum y con el primer byte "00", se puede codificar en base 58 . Esto nos da la dirección:

base58=({1..9} {AH} {J..N} {P..Z} {a..k} {m..z})

codificarBase58() {
    #58 = 0x3A
    bc 0) { n%3A ; n/=3A }" |
    tac |
    mientras lee n
    haz echo -n ${base58[n]}
    hecho
}
$ printf "%34s\n" "$(encodeBase58 "00$1$(checksum "$char$1")")" |
  sed "s/ /1/"

1GbLZiNzi7DTB4UowMuyqJw5Bh95yCbu3R

Poniendo todo junto , podemos usar la función publicKeyToAddress, como se define a continuación. Esto puede ser parte de un script bash, o puede escribirlo en la línea de comando.

base58=({1..9} {AH} {J..N} {P..Z} {a..k} {m..z})

codificarBase58() {
    #58 = 0x3A
    bc 0) { n%3A ; n/=3A }" |
    tac |
    mientras lee n
    haz echo -n ${base58[n]}
    hecho
}

suma de comprobación () {
    xxd -p -r /dev/null |
    cola -c 65 |
    openssl dgst -sha256 -binario |
    openssl dgst -rmd160 -binario |
    xxd -p -c 80
    )
}
$ abre SSL ec -pubout /dev/null | publicKeyToAddress

1GbLZiNzi7DTB4UowMuyqJw5Bh95yCbu3R

Mi mejor recomendación es intentar importar la clave privada al servicio https://blockchain.info/wallet/ . Esto se puede encontrar en la pestaña avanzada de la billetera. La clave pública correspondiente se agregará a su billetera para depósitos.

Una segunda opción que no requiere una cuenta es ir a través de https://www.bitaddress.org y analizarla con la pestaña de dirección personalizada.

La biblioteca Python de pycoin podría ser un buen punto de partida. Tiene una utilidad que le dará la clave pública para una clave privada dada. Desafortunadamente, no parece tener una interfaz de línea de comandos adecuada para un uso programático fácil.