Since I just added this "optimization" to FinderOuter I though I should give an update on
this post regarding the 7 characters and the checksum (I can't believe it's been 2 years!).
The key posted in OP (5KMWmYkn5YWkJnUDG4utD9L1HXQv3DBseqqCGsQXmthc
EerbA7k) is missing more than just its checksum. In fact there are 515 valid WIFs with the same starting 44 characters. I did a little modification to the code and printed all of them. Interestingly enough the valid key is found on line 122.
https://gist.github.com/Coding-Enthusiast/8339f64c736053107f0d918675c186e0I ran a lot of tests with different keys before releasing this code and I came up with these numbers representing the number of possible valid keys with the same initial characters in case the missing ones are from the end. In case of compressed keys checksum could be up to 6 chars and only 5 for uncompressed ones.
Uncompressed ; Compressed
1-5 -> 1 ; 1
6 -> 9 ; 1
7 -> 514 ; 3
8 -> 29,817 ; 117
9 -> 1,729,387 ; 6,756
10 -> 100,304,420 ; 391,815
11 -> 5,817,656,406 ; 22,725,222
Here is a non-permanent link to the code (
https://github.com/Coding-Enthusiast/FinderOuter/blob/master/Src/FinderOuter/Services/Base58Sevice.cs#L130-L139) which may be updated in the future if I find any new information.
While I'm here, is there any wallet or tool (apart from bitaddress.org) that has ever used Base64 encoding for private keys?
Since looking at OP, FinderOuter already has an option to recover everything listed there (Base58 WIFs, Base16, mini keys, BIP38, even addresses and finally mnemonics) but the only things missing right now are Base64, BIP38 password brute force and wallet file recovery which I have plans for implementing the last two after releasing 0.5.0 with all the optimizations but not Base64 and don't know if I should add that to the list or not.
PS. your list is missing
Version Extended Wallet Import Formats (WIFs) outlined in
BIP-178 and has a briefly used alternative different implementation by
Electrum.
It is basically the same looking WIFs that when decoded have used either a suffix or prefix (depending on the implementation) to "extend" the key with extra bits to indicate the corresponding pubkey script type derived from that key. Such keys can't be imported in wallets without converting them first.
I also have an implementation of it in
Bitcoin.Net with a bunch of
test vectors (first 3 WIFs are BIP-178 and the remaining 5 are Electrum specific) which also supports the Electrum
script type format (scripttype:wif).