Gibt es eine Möglichkeit, eine Brain Wallet über die Befehlszeile oder Konsole zu generieren?

Gibt es eine Komplettlösung für die Konsole , um Brain Wallet zu generieren? Etwas wie:

echo "sausage" | xxd -r -p | sha256sum | awk '{print $1}' | rmd160 -x | blablabla

Ich habe diesen Artikel gelesen: https://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses

0-1) Ich überspringe die Generierung des öffentlichen Schlüssels vom privaten und fange damit an, als wäre es eine Gehirn-Wallet-"Wurst":

2) - Führen Sie eine sha256sum von Pubkey aus:

# echo -n 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6 \
| xxd -r -p | sha256sum | awk '{print $1}' 
600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

3) - Führen Sie RIPEMD-160-Hashing für das Ergebnis von SHA-256 durch:

# echo -n 600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408 \
| xxd -r -p | openssl rmd160 
010966776006953d5567439e5e39f86a0d273bee

4) - Versionsbyte vor RIPEMD-160-Hash hinzufügen (0x00 für Hauptnetzwerk)

# echo 010966776006953d5567439e5e39f86a0d273bee \ 
| sed -e 's/^/00/'  
00010966776006953d5567439e5e39f86a0d273bee

5) - Führen Sie SHA-256-Hash auf dem erweiterten RIPEMD-160-Ergebnis aus

# echo -n 00010966776006953D5567439E5E39F86A0D273BEE \
| xxd -r -p | sha256sum | awk '{print $1}'
445c7a8007a93d8733188288bb320a8fe2debd2ae1b47f0f50bc10bae845c094

6) - Führen Sie einen SHA-256-Hash auf dem Ergebnis des vorherigen SHA-256-Hash aus

# echo -n 445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094 \
| xxd -r -p | sha256sum | awk '{print $1}'
d61967f63c7dd183914a4ae452c9f6ad5d462ce3d277798075b107615c1a8a30

7) - Nehmen Sie die ersten 4 Bytes des zweiten SHA-256-Hashes. Dies ist die Adressprüfsumme

# echo d61967f63c7dd183914a4ae452c9f6ad5d462ce3d277798075b107615c1a8a30 \
| cut -b 1,2,3,4,5,6,7,8 
d61967f6

Hab ich recht?

8) - Fügen Sie die 4 Prüfsummenbytes aus Stufe 7 am Ende des erweiterten RIPEMD-160-Hash aus Stufe 4 hinzu. Dies ist die 25-Byte-Binär-Bitcoin-Adresse.

verketten

9) - Konvertieren Sie das Ergebnis aus einem Byte-String in einen base58-String mit Base58Check-Codierung. Dies ist das am häufigsten verwendete Bitcoin-Adressformular

Ich nehme base58 von hier: https://github.com/grondilu/bitcoin-bash-tools/blob/master/bitcoin.sh


Das Ergebnis, das ich habe, ist:

declare -a base58=(
      1 2 3 4 5 6 7 8 9
    A B C D E F G H   J K L M N   P Q R S T U V W X Y Z
    a b c d e f g h i j k   m n o p q r s t u v w x y z
)

encodeBase58() {
    dc -e "16i ${1^^} [3A ~r d0<x]dsxx +f" |
    while read -r n; do echo -n "${base58[n]}"; done
}
stage24="$(echo -n 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6 \
    | xxd -r -p | sha256sum | awk '{print $1}' \
    | xxd -r -p | openssl rmd160 | awk '{print $2}' \
    | sed -e 's/^/00/')"

stage57="$(echo $stage24 | xxd -r -p | sha256sum | awk '{print $1}' \
    | xxd -r -p | sha256sum | awk '{print $1}' \
    | cut -b 1,2,3,4,5,6,7,8)"

# stage 89
echo "1$(encodeBase58 "${stage24}${stage57}")"

Bingo!

16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

Laut Wiki: en.bitcoin.it/wiki/Wallet_import_format

Der private Schlüssel muss vor dem Import auf ähnliche Weise konvertiert werden:

declare -a base58=(
      1 2 3 4 5 6 7 8 9
    A B C D E F G H   J K L M N   P Q R S T U V W X Y Z
    a b c d e f g h i j k   m n o p q r s t u v w x y z
)

encodeBase58() {
    dc -e "16i ${1^^} [3A ~r d0<x]dsxx +f" |
    while read -r n; do echo -n "${base58[n]}"; done
}

stage12="$(echo -n "18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725" | sed -e 's/^/80/')"
stage35="$(echo $stage12 | xxd -r -p | sha256sum | awk '{print $1}' | xxd -r -p | sha256sum | awk '{print $1}'  | cut -b 1,2,3,4,5,6,7,8)"

echo "$(encodeBase58 "${stage12}${stage35}")"

Jetzt habe ich noch eine Frage: Wie macht man eine Brain Wallet wie "Wurst"?

Die Tatsache, dass es FFFF...FFFF akzeptiert, klingt nach einem Fehler. Etwas überprüfen.
Sie haben Recht. Error:{"code":-1,"message":"CKey::GetPrivKey() : i2d_ECPrivateKey failed"}
Wissen Sie, wie genau Sie Schritt 1 -> 2 realisieren, aus sha256 ec pubkey in generieren bash?

Antworten (1)

Die Antwort war hier: https://en.bitcoin.it/wiki/Wallet_import_format

Um Brainwallet zu erstellen, muss ein sha256-Passwort verwendet werden:

# echo -n 'yourbrainwalletpassword' | sha256sum 
8abe468e0d5a814c644d9517ae35b36666d554b7bd682fa28c39e90d0cb5f91a

Ich habe ein kleines Bash-Skript geschrieben:

declare -a base58=(
      1 2 3 4 5 6 7 8 9
    A B C D E F G H   J K L M N   P Q R S T U V W X Y Z
    a b c d e f g h i j k   m n o p q r s t u v w x y z
)

encodeBase58() {
    dc -e "16i ${1^^} [3A ~r d0<x]dsxx +f" |
    while read -r n; do echo -n "${base58[n]}"; done
}

[ -z "$1" ] && echo "Usage: ./script.sh privkey" && exit 1

privkey="$1"

stage12="$(echo -n "$privkey" | sed -e 's/^/80/')"
stage35="$(echo $stage12 | xxd -r -p | sha256sum | awk '{print $1}' | xxd -r -p | sha256sum | awk '{print $1}'  | cut -b 1,2,3,4,5,6,7,8)"

echo "$(encodeBase58 "${stage12}${stage35}")"

Verwenden Sie dieses Skript gegen die sha256-Summe:

# bash script.sh 8abe468e0d5a814c644d9517ae35b36666d554b7bd682fa28c39e90d0cb5f91a
5JsPbHfVB7FeD6gGWoaQv6khRsasTJDK1tAiJ4TxgyWJLcjfgNa

Jetzt kann ich privkey in Folgendes importieren wallet.dat:

# bitcoind importprivkey 5JsPbHfVB7FeD6gGWoaQv6khRsasTJDK1tAiJ4TxgyWJLcjfgNa "yourbrainwalletpassword" 
# bitcoind getaddressesbyaccount "yourbrainwalletpassword" 
[ 
    "1Gu3HZDq6YEXfxwDC3A3EhDfEVAeCijbEt" 
] 

Laut Wiki gibt es obere und untere Grenzen.

Nahezu jede 256-Bit-Zahl ist ein gültiger privater Schlüssel. Insbesondere jede 256-Bit-Zahl zwischen 0x1 und 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141 ist ein gültiger privater Schlüssel.

Ich importiere jedoch erfolgreich den privaten Schlüssel

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 

Nach einer Weile sagt mir Bitcoin:

error: {"code":-1,"message":"CKey::GetPrivKey() : i2d_ECPrivateKey failed"}

Hoffe es wäre hilfreich.

Vielen Dank !

Wie kann ich eine öffentliche Adresse von WIF erhalten?