Home > Back-end >  What is the difference between a Non-base 58 character and a invalid checksum private WIF key?
What is the difference between a Non-base 58 character and a invalid checksum private WIF key?

Time:06-08

I am just playing around with a NodeJS dependency called CoinKey

Here is the question:

I randomly generate WIF keys with this function:

case 'crc':
        let randomChars = 'cbldfganhijkmopqwesztuvxyr0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
        let generatedPrivateKey = ''

        for (let i = 0; i < 50; i  )
            generatedPrivateKey  = randomChars.charAt(Math.floor(Math.random() * randomChars.length))

        return prefix   generatedPrivateKey

I have here 2 real examples:

1 = LSY3MrnXcjnW5QU2ymwZn6UYu412jr577U9AnR9akwTg2va7h9B -> Invalid checksum

2 = L2l37v6EPDN423O02BqV02T2PK1A6vnjBO1HRmgsZ6384LNdSCj -> Non-base58 character

I call the function CoinKey.fromWif(privateKey) with of course one of the 2 private keys above. But why does key 1 give me the error Invalid checksum and key 2 gives me the error Non-base58 character?

I am just a simple developer, I don't have any knowledge about encryption etc. The only thing i know that i try to generate a WIF key, and a WIF key is a shorter encryption of a larger private key. And yes i also know that it's almost as good as impossible to brute-force such a big private key but as i said i am just playing around.

CodePudding user response:

The base 58 character set only contains 58 characters. a-z, A-Z, 0-9 are 62, so four of them are not valid. Case 2 apparently contains one or more of the invalid characters.

And each key has a checksum. So if all the characters are valid the checksum is checked. Looks like your first case has all valid characters, purely by coincidence, but not the correct checksum.

It's pretty nonstandard and a bit inefficient; base 64 is commonly used.

  • Related