<p>What you are requesting is described as computing the Wallet Import Format for that private key:</p>

<ul>
<li><a href="http://en.bitcoin.it/wiki/Wallet_import_format" rel="noreferrer">http://en.bitcoin.it/wiki/Wallet_import_format</a></li>
</ul>

<p>Using your example:</p>

<p>1.) Take a private key (Below is the HEX representation of binary value)</p>

<blockquote>
  <p>7542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C</p>
</blockquote>

<p>2.) Add a 0x80 byte in front of it</p>

<blockquote>
  <p>807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C</p>
</blockquote>

<p>3.) Perform SHA-256 hash on the extended key</p>

<pre><code>$ echo -n '807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C' | xxd -r -p | sha256sum -b
</code></pre>

<blockquote>
  <p>7DE4708EB23AB611371BB778FC0C8BDE80394AB2D8704D7129FB5771E2F1730D</p>
</blockquote>

<p>4.) Perform SHA-256 hash on result of SHA-256 hash</p>

<pre><code>$ echo -n '7DE4708EB23AB611371BB778FC0C8BDE80394AB2D8704D7129FB5771E2F1730D' | xxd -r -p | sha256sum -b
</code></pre>

<blockquote>
  <p>CD5C4A8E03DFBB0E3AA021C2D74A9EAA43CE4C9CB1B20FC88729A7A5834141CA</p>
</blockquote>

<p>5.) Take the first 4 bytes of the second SHA-256 hash, this is the checksum</p>

<blockquote>
  <p>CD5C4A8E</p>
</blockquote>

<p>6.) Add the 4 checksum bytes from point 5 at the end of the extended key from point 2</p>

<blockquote>
  <p>807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027CCD5C4A8E</p>
</blockquote>

<p>7.) Convert the result from a byte string into Base58 to get it into the Base58Check format. This is also known as the Wallet Import Format</p>

<p>(Converted from point 6 to base58 using <a href="https://bitcointools.appspot.com" rel="noreferrer">https://bitcointools.appspot.com</a>, or using encodeBase58 from <a href="https://github.com/grondilu/bitcoin-bash-tools" rel="noreferrer">https://github.com/grondilu/bitcoin-bash-tools</a>)</p>

<blockquote>
  <p>5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH</p>
</blockquote>

CC BY-SA 3.0
2013-03-09T05:10:20.613Z
A handy utility that does each step: http://gobittest.appspot.com/PrivateKey
Stephen Gornick
CC BY-SA 3.0
2013-03-09T05:18:30.423Z
This looks pretty good! I'll give it a shot Sunday (we're going 'cross state to see frozen waves tomorrow). Expect an 'accepted' soon! Oh, and very useful links.
Austin Burk
CC BY-SA 3.0
2013-03-11T01:04:16.253Z
Thank you very much. Everything's working really well now. 
For future reference to anyone wanting to use Grondilu's Bitcoin Bash Tools: Source bitcoin.sh after extracting it into your directory.
Austin Burk
CC BY-SA 3.0
2014-11-10T00:21:20.380Z
The wording of step 7 is a little misleading.
You've already added the checksum in step 6, so in step 7 you should convert the hex to Base58, not Base58Check. Brainwallet.org has a converter. You can download the brainwallet source code from github and run it offline.
kellrobinson
CC BY-SA 3.0
2016-03-20T11:02:25.637Z
on Step 7 Convert the hex string back into bytecode before running it through base58...that step isn't very clear...Also I found that I had to decode my hex values back into bytecode for the sha digests but to then encode them back into hex so they were readable to my console (using python)
Frankenmint
CC BY-SA 3.0
2017-04-22T15:52:00.350Z
Something **is wrong**, here or at [lenschulwitz.com/base58](http://lenschulwitz.com/base58), where I use the input `7542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C` and the output for "enconde from hex" was `8tjwWnNgm3DrBEwCsPqbSAPkCspRRmA8ftHjQTycL3gw`, **not** "5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH"
Peter Krauss
CC BY-SA 3.0
2013-03-09T05:07:14.927Z
2014-11-10T05:32:31.763Z
2014-11-10T05:32:31.763Z
Stephen Gornick
<p>How can I take the output of sha256sum</p>

<pre><code>sudofox@ubuntu:~$ echo -n 'Hi guys!' | sha256sum
7542fb6685f9fd8f37d56faf62f0bb4563684a51539e4b26f0840db361e0027c  -
</code></pre>

<p>and turn it into a Base58Check encoded private key?</p>

<p>I need to be able to do this with a list of SHA256 keys. Is there a script I can download, or must I spend a few weeks making it just so I can make my temporary addresses?</p>

<p>In response to first comment: 
No, I must input a string, like "fluttershy", for example, into sha256sum and then I must encode the output of sha256sum into a base58check private key.</p>

<p>string -->sha256sum --> some automagic process, which is the purpose of this question --> bitcoin private key.</p>

<p>Update: For anyone wanting to use Grondilu's Bitcoin Bash Tools: You need to source the bitcoin.sh file after extracting it into your directory to use the functions.</p>

<p><code>source ./bitcoin.sh</code></p>

<p>Update 2 (Aug 2017): Rewrote script to go from step 1 to WIF in one go. You can just add the declaration of base58 and the encodeBase58 functions from bitcoin.sh if you want to skip the rest of the lib.</p>

<pre><code>#!/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
</code></pre>

<p>The usage would be </p>

<p>./sha256_to_privkey.sh key</p>

<p>where in my example (see Stephen Gornick's answer), key would be</p>

<pre><code>807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027CCD5C4A8E
</code></pre>

<p>Do the same thing for the various functions, modifying as needed. Hope this helps anyone struggling to use the tools.</p>

CC BY-SA 3.0
2013-03-09T03:36:03.223Z
Yes, this is possible. But I have a strong feeling this is an [XY problem](http://meta.stackexchange.com/a/66378/201940)
Nick ODell
CC BY-SA 3.0
2013-03-09T03:50:58.380Z
Clarification (well, stating in explicit terms) above.
Austin Burk
CC BY-SA 3.0
2013-03-09T04:08:38.310Z
Is there some reason why you want to send your bitcoins to an unspendable public key?
Nick ODell
CC BY-SA 3.0
2013-03-09T05:04:27.277Z
@Nick ODell "Unspendable public key?" I'm generating a bitcoin private key. That means it would be spendable as long as I still have the key I generated.

You changed the title of my question so that it looks like I want to hash the private key and _then_ try to turn _that_ into a bitcoin address. Why would I want to do that?          I'm changing the title to "How can I convert a SHA256 hash into a Bitcoin base58 private key?"
Austin Burk
<private-key><linux><sha256><base58>
How can I convert a SHA256 hash into a Bitcoin base58 private key?
Austin Burk
# How can I convert a SHA256 hash into a Bitcoin base58 private key?

(Asked by: username_0 on 2013-03-09)

How can I take the output of sha256sum

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

```

and turn it into a Base58Check encoded private key?

I need to be able to do this with a list of SHA256 keys. Is there a script I can download, or must I spend a few weeks making it just so I can make my temporary addresses?

In response to first comment:
No, I must input a string, like "fluttershy", for example, into sha256sum and then I must encode the output of sha256sum into a base58check private key.

string -->sha256sum --> some automagic process, which is the purpose of this question --> bitcoin private key.

Update: For anyone wanting to use Grondilu's Bitcoin Bash Tools: You need to source the bitcoin.sh file after extracting it into your directory to use the functions.

`source ./bitcoin.sh`

Update 2 (Aug 2017): Rewrote script to go from step 1 to WIF in one go. You can just add the declaration of base58 and the encodeBase58 functions from bitcoin.sh if you want to skip the rest of the lib.

```
#!/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

```

The usage would be

./sha256\_to\_privkey.sh key

where in my example (see username_2 username_2's answer), key would be

```
807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027CCD5C4A8E

```

Do the same thing for the various functions, modifying as needed. Hope this helps anyone struggling to use the tools.

**Tags:** private-key, linux, sha256, base58

> **Comments:**
> **username_1**: Yes, this is possible. But I have a strong feeling this is an [XY problem](http://meta.stackexchange.com/a/66378/201940)  
> **username_0**: Clarification (well, stating in explicit terms) above.  
> **username_1**: Is there some reason why you want to send your bitcoins to an unspendable public key?  
> **username_0**: @username_1 "Unspendable public key?" I'm generating a bitcoin private key. That means it would be spendable as long as I still have the key I generated.  You changed the title of my question so that it looks like I want to hash the private key and _then_ try to turn _that_ into a bitcoin address. Why would I want to do that?          I'm changing the title to "How can I convert a SHA256 hash into a Bitcoin base58 private key?"  

---

## 1 answers

### Answer by username_2 on 2013-03-09. Score: 19 | Accepted answer

What you are requesting is described as computing the Wallet Import Format for that private key:

* <http://en.bitcoin.it/wiki/Wallet_import_format>

Using your example:

1.) Take a private key (Below is the HEX representation of binary value)

> 7542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C

2.) Add a 0x80 byte in front of it

> 807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C

3.) Perform SHA-256 hash on the extended key

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

```

> 7DE4708EB23AB611371BB778FC0C8BDE80394AB2D8704D7129FB5771E2F1730D

4.) Perform SHA-256 hash on result of SHA-256 hash

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

```

> CD5C4A8E03DFBB0E3AA021C2D74A9EAA43CE4C9CB1B20FC88729A7A5834141CA

5.) Take the first 4 bytes of the second SHA-256 hash, this is the checksum

> CD5C4A8E

6.) Add the 4 checksum bytes from point 5 at the end of the extended key from point 2

> 807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027CCD5C4A8E

7.) Convert the result from a byte string into Base58 to get it into the Base58Check format. This is also known as the Wallet Import Format

(Converted from point 6 to base58 using <https://bitcointools.appspot.com>, or using encodeBase58 from <https://github.com/grondilu/bitcoin-bash-tools>)

> 5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH

> **Comments:**
> **username_2**: A handy utility that does each step: http://gobittest.appspot.com/PrivateKey  
> **username_0**: This looks pretty good! I'll give it a shot Sunday (we're going 'cross state to see frozen waves tomorrow). Expect an 'accepted' soon! Oh, and very useful links.  
> **username_0**: Thank you very much. Everything's working really well now.  For future reference to anyone wanting to use Grondilu's Bitcoin Bash Tools: Source bitcoin.sh after extracting it into your directory.  
> **username_3**: The wording of step 7 is a little misleading. You've already added the checksum in step 6, so in step 7 you should convert the hex to Base58, not Base58Check. Brainwallet.org has a converter. You can download the brainwallet source code from github and run it offline.  
> **username_4**: on Step 7 Convert the hex string back into bytecode before running it through base58...that step isn't very clear...Also I found that I had to decode my hex values back into bytecode for the sha digests but to then encode them back into hex so they were readable to my console (using python)  
> **username_5**: Something **is wrong**, here or at [lenschulwitz.com/base58](http://lenschulwitz.com/base58), where I use the input `7542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C` and the output for "enconde from hex" was `8tjwWnNgm3DrBEwCsPqbSAPkCspRRmA8ftHjQTycL3gw`, **not** "5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH"  

---

