WIF Private Key

WIF Private Key An easy to share format of a private key.

A private key can be converted in to a "Wallet Import Format", which basically makes it easier to copy and move around.

private key     = ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db2
WIF private key = L5EZftvrYaSudiozVRzTqLcHLNDoVn7H5HSfM9BAN6tMJX8oTWz6

A WIF private key is just another way of representing your original private key. If you have a WIF private key, you can always convert it back in to its original format.

How to create a WIF private key.

A WIF private key is a standard private key, but with a few added extras:

  1. Version Byte prefix - Indicates which network the private key is to be used on.
    • 0x80 = Mainnet
    • 0xEF = Testnet
  2. Compression Byte suffix (optional) - Indicates if the private key is used to create a compressed public key.
    • 0x01
  3. Checksum - Useful for detecting errors/typos when you type out your private key.

This is all then converted to Base58, which shortens the entire thing and makes it easier to transcribe...

Code

Note: This code requires the checksum.rb and base58_encode.rb functions.

# Convert Private Key to WIF
privatekey = "ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db2"
extended = "80" + privatekey + "01"
extendedchecksum = extended + checksum(extended)
wif = base58_encode(extendedchecksum)

puts wif

By Greg Walker,

Last Updated: 26 Nov 2018
  • 26 Nov 2018: Added sub titles to every page.
  • 25 Nov 2018: Subtitles for pages in Glossary. Looks good.
  • 15 Mar 2018: glossary/wif - code example links to github (for consistent code links)
  • 15 Mar 2018: CSS - Using SVBasicManual for tabs and headers. Also improved glossary home diagrams with hover fade.
  • 11 Mar 2018: Glossary | Public Key
  • 24 May 2017: wif.md - separated wallet import format from private-key.md in to its own page

Hey there, it's Greg.

I'll let you know if something seriously interesting happens in bitcoin.


Don't worry, it doesn't happen very often.