¿Cómo puedo convertir un hash SHA256 en una clave privada Bitcoin base58?

¿Cómo puedo tomar la salida de sha256sum?

sudofox@ubuntu:~$ echo -n 'Hi guys!' | sha256sum
7542fb6685f9fd8f37d56faf62f0bb4563684a51539e4b26f0840db361e0027c  -

y convertirlo en una clave privada codificada en Base58Check?

Necesito poder hacer esto con una lista de claves SHA256. ¿Hay algún script que pueda descargar, o debo pasar algunas semanas haciéndolo solo para poder hacer mis direcciones temporales?

En respuesta al primer comentario: No, debo ingresar una cadena, como "fluttershy", por ejemplo, en sha256sum y luego debo codificar la salida de sha256sum en una clave privada base58check.

string -->sha256sum --> algún proceso automático, que es el propósito de esta pregunta --> clave privada de bitcoin.

Actualización: para cualquiera que quiera usar las herramientas Bitcoin Bash de Grondilu: debe obtener el archivo bitcoin.sh después de extraerlo en su directorio para usar las funciones.

source ./bitcoin.sh

Actualización 2 (agosto de 2017): secuencia de comandos reescrita para pasar del paso 1 a WIF de una sola vez. Simplemente puede agregar la declaración de base58 y las funciones encodeBase58 de bitcoin.sh si desea omitir el resto de la biblioteca.

#!/bin/bash
#Tool to convert bitcoin privkeys into WIF keys
# by sudofox

source ./bitcoin.sh

KEY=$1 # first arg

# add 0x80 to beginning
EXTENDEDKEY=$(echo 80$KEY)
FIRSTHASH=$(echo -n "$EXTENDEDKEY" |xxd -r -p |sha256sum -b|awk '{print $1}')
SECONDHASH=$(echo -n "$FIRSTHASH" |xxd -r -p |sha256sum -b|awk '{print $1}')
CHECKSUM=$(echo $SECONDHASH|cut -c1-8)
FINAL=$(encodeBase58 $EXTENDEDKEY$CHECKSUM)
echo $FINAL

el uso seria

./sha256_to_privkey.sh clave

donde en mi ejemplo (ver la respuesta de Stephen Gornick), la clave sería

807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027CCD5C4A8E

Haga lo mismo para las diversas funciones, modificando según sea necesario. Espero que esto ayude a cualquiera que tenga dificultades para usar las herramientas.

Sí, esto es posible. Pero tengo la fuerte sensación de que este es un problema XY
Aclaración (bueno, en términos explícitos) anterior.
¿Hay alguna razón por la que desee enviar sus bitcoins a una clave pública no gastable?
@Nick ODell "¿Clave pública inservible?" Estoy generando una clave privada de bitcoin. Eso significa que sería gastable mientras todavía tenga la clave que generé. Cambió el título de mi pregunta para que parezca que quiero codificar la clave privada y luego tratar de convertirla en una dirección de bitcoin. ¿Por qué querría hacer eso? Estoy cambiando el título a "¿Cómo puedo convertir un hash SHA256 en una clave privada Bitcoin base58?"

Respuestas (2)

Lo que está solicitando se describe como calcular el formato de importación de billetera para esa clave privada:

Usando tu ejemplo:

1.) Tome una clave privada (a continuación se muestra la representación HEX del valor binario)

7542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C

2.) Agregue un byte 0x80 delante de él

807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C

3.) Realizar hash SHA-256 en la clave extendida

$ echo -n '807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C' | xxd -r -p | sha256sum -b

7DE4708EB23AB611371BB778FC0C8BDE80394AB2D8704D7129FB5771E2F1730D

4.) Realizar el hash SHA-256 en el resultado del hash SHA-256

$ echo -n '7DE4708EB23AB611371BB778FC0C8BDE80394AB2D8704D7129FB5771E2F1730D' | xxd -r -p | sha256sum -b

CD5C4A8E03DFBB0E3AA021C2D74A9EAA43CE4C9CB1B20FC88729A7A5834141CA

5.) Tome los primeros 4 bytes del segundo hash SHA-256, esta es la suma de verificación

CD5C4A8E

6.) Agregue los 4 bytes de suma de verificación del punto 5 al final de la clave extendida del punto 2

807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027CCD5C4A8E

7.) Convierta el resultado de una cadena de bytes en Base58 para obtener el formato Base58Check. Esto también se conoce como el formato de importación de billetera.

(Convertido del punto 6 a base58 usando https://bitcointools.appspot.com , o usando encodeBase58 desde https://github.com/grondilu/bitcoin-bash-tools )

5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH

Una práctica utilidad que hace cada paso: gobittest.appspot.com/PrivateKey
¡Esto se ve muy bien! Lo intentaré el domingo (vamos a cruzar el estado para ver olas congeladas mañana). ¡Espera un 'aceptado' pronto! Ah, y enlaces muy útiles.
Muchísimas gracias. Todo está funcionando muy bien ahora. Para referencia futura a cualquier persona que desee utilizar las herramientas Bitcoin Bash de Grondilu: Obtenga bitcoin.sh después de extraerlo en su directorio.
La redacción del paso 7 es un poco engañosa. Ya agregó la suma de verificación en el paso 6, por lo que en el paso 7 debe convertir el hexadecimal a Base58, no a Base58Check. Brainwallet.org tiene un convertidor. Puede descargar el código fuente de Brainwallet desde github y ejecutarlo sin conexión.
en el Paso 7 Convierta la cadena hexadecimal nuevamente en código de bytes antes de ejecutarlo a través de base58... ese paso no está muy claro... También descubrí que tenía que decodificar mis valores hexadecimales nuevamente en código de bytes para los resúmenes de sha pero luego codificar ellos de nuevo en hexadecimal para que fueran legibles para mi consola (usando python)
Algo está mal , aquí o en lenschulwitz.com/base58 , donde uso la entrada 7542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027Cy la salida para "enconde from hex" fue 8tjwWnNgm3DrBEwCsPqbSAPkCspRRmA8ftHjQTycL3gw, no "5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH"

Si no desea calcular la clave manualmente, hay una útil utilidad de línea de comandos para esto llamada bitcoin-tool:

$ ./bitcoin-tool \
  --input-file <(echo -n 'Hi guys!' | openssl dgst -sha256 -binary) \
  --input-format raw \
  --input-type private-key \
  --network bitcoin \
  --output-type private-key-wif \
  --output-format base58check \
  --public-key-compression uncompressed
5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH

Pasar --output-type allproduce resultados aún más interesantes:

address.hex:00a25b865343d3fcc08994005f496265b48349e363
address.base58:13GC5PkewvCycNNVVUuwJEnxPr6Lz
address.base58check:1FoU7KqP2xnWBo7sULZn5EynWdbYVVBXaG
public-key-ripemd160.hex:a25b865343d3fcc08994005f496265b48349e363
public-key-ripemd160.base58:3GC5PkewvCycNNVVUuwJEnxPr6Lz
public-key-ripemd160.base58check:FoU7KqP2xnWBo7sULZn5EynWdbYSDL49B
public-key-sha256.hex:12317a311bea88a372138319d2ab671ef9fed4ada741d91f368a4c6c7b3c146a
public-key-sha256.base58:2E26bn7S3ByBj1KWn8zjTVzAYVRD5osYmo1HAP5UfAPB
public-key-sha256.base58check:91iv7C9DcPrrReTtBJsxMTRFHKm2yJwsYkz1mbDk51ePCC54y
public-key.hex:048c6d8595550811bef5592e56f33f306cd07561b3f65ab10d9188fc0aa89aba7a564aa08b528475baadf0a0035633894248269f266c3c71b67e574dd368275c1c
public-key.base58:QHH5Zy6u7FsTPjLdMLp4yVdL6cFYo2yh8XoptynaU8HEqheCNEwJiVCfCpm6BBBuCXVB2ESny8qAAEQN3Efc1kq1
public-key.base58check:3dLjoxm8unYpP6iKX95T5YWXVA7xbVhmyJrnKoWYjeTFWqKTmgVoUSyjXd1D5KWNnzYgcGw5fn8WefUjnTDnXBVrTtkTGE
private-key-wif.hex:807542fb6685f9fd8f37d56faf62f0bb4563684a51539e4b26f0840db361e0027c
private-key-wif.base58:fAHHP3kbUP5cDBoAfwrZYCR4WC6BnnQCEaQPMaNdrRyCF
private-key-wif.base58check:5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH
private-key.hex:7542fb6685f9fd8f37d56faf62f0bb4563684a51539e4b26f0840db361e0027c
private-key.base58:8tjwWnNgm3DrBEwCsPqbSAPkCspRRmA8ftHjQTycL3gw
private-key.base58check:teHuNfDBiki1sSSD73SeGVtTq1hDky8TYY3cfuxkPmuftixzQ
No sé cómo me lo perdí, pero esta es una forma de obtener la dirección de hash160 hex., public-key-ripemd160.hex:a25b865343d3fcc08994005f496265b48349e363