WIF Private Key

WIF Private Key Wallet Import Format

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: Mar 15 2018
  • Mar 15 2018: glossary/wif - code example links to github (for consistent code links)
  • Mar 15 2018: CSS - Using SVBasicManual for tabs and headers. Also improved glossary home diagrams with hover fade.
  • Mar 11 2018: Glossary | Public Key
  • May 24 2017: wif.md - separated wallet import format from private-key.md in to its own page