# Why does the length of a bitcoin key vary?

Why does the length of a bitcoin key vary? Why aren't they all the same length?

The length of a key doesn't vary. Private keys are always 32 bytes, and public keys are always 65 bytes (or 33 bytes for a compressed public key). Public key hashes are always 20 bytes.

The length of addresses vary because in Bitcoin's base58 encoding, leading zero bytes are expressed as a single "1". Other bytes require more than one character in order to be expressed in base58.

• Do you have private keys and public keys reversed in the above answer? It seems to me that private keys are longer. – shoeless joe Nov 20 '11 at 19:34
• @shoelessjoe I don't think so. Public keys are definitely 64 bytes plus the leading 0x04 byte, and I assume that the 256 in "secp256k1" refers to the size of the private key in bits. – theymos Nov 21 '11 at 1:33
• You said "Private keys are always 32 bytes, and public keys are always 65 bytes." That makes public keys longer than private keys? – shoeless joe Nov 29 '11 at 18:13
• @shoelessjoe Yes. I think this is the case with all public-key crypto, actually. – theymos Nov 30 '11 at 22:12
• In fact, we could move to compressed public keys, which are 257 bits long (33 bytes). Slightly longer than the private key indeed, but almost nothing. – Pieter Wuille Dec 4 '11 at 14:56

Private keys are 256 bit numbers

Public keys are a pair of X,Y coordinates. Each coordinate is a 256 bit number. BUT for every X coordinate there are only two possible Y coordinates (one positive, one negative) so you can store a public key as just the X coordinate (256 bits) and the sign of the Y coordinate (1 bit) and the proper Y coordinate can be calculate from the X coordinate and the sign.

So private key = 256 bits, public key = 2*256=512 bits OR 256+1=257 bits

Then there is a small amount of formatting overhead of a few bits.

Then these are encoded.