Glossary | 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...


The following code makes use of a checksum.rb and an encode_base58.rb function.

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

puts wif