Furthermore, the size of the 2014 wallet is 70kb while an empty wallet from 2021 is 1.5mb
This is expected. Prior to BIP 32 HD wallets (introduced in Bitcoin Core 0.13 in 2016), wallets pregenerated 100 keys (for both receiving and change). After BIP 32 HD wallets, wallets pregenerated 2000 keys (1000 for receiving, 1000 for change). This causes the size difference.
I thought that the format of the Wallet would be different but ... no.
The format has not changed. Compatibility is maintained.
As you can see, those of 2014 and 2015 have one less character. I don't know if this has something to do with it or not.
It does not. That 3rd parameter is a number of iterations to do and is based off of a benchmark of your computer that is done at the time encryption is added.
The btc-qt v0.21 does not give me errors when loading the 2014 and 2015 wallets , in fact it detects the movements that there were. The btcrecover does not show any error either (I don't know, something like the wallet was not formatted correctly or something like that, but no ...)
This is expected. Compatibility is maintained.
I'm also not sure what each fields represents:
The format is as follows:
$bitcoin$<length of encrypted key>$<encrypted key>$<length of salt>$<salt>$<derivation method iteration count>$<length of derivation method>$<derivation method>$<length of additional parameters>$<additional parameters>$
<length of encrypted key> is always 64. The encrypted key is a 32 byte key which means it is 64 characters.
<encrypted key> is the encryption key which itself is encrypted with your passphrase. Your passphrase is hashed to get the key that is used to encrypt this encrypted key.
<length of salt> is always 16. The salt is 8 bytes which means it is 16 characters.
<salt> is the salt. It is randomly generated. The salt is combined with your passphrase to generate the key used to encrypt the actual encryption key.
<derivation method iteration count> is the number of times to run the hash function that is used to derive the encryption key from your passphrase.
<length of derivation method> is always 2. The derivation method is stored as a single byte number, so it is always 2 characters.
<derivation method> is an integer that indicates the function to be used to derive the encryption key from the passphrase. Currently there is only one method, SHA512, and it is indicated with the number 0.
<length of additional parameters> is always 2. There are no additional parameters, so it is represented by a single byte of 0, which makes the length 2 characters.
<additional parameters> is always 00. There are no additional parameters, so it is always a 0 byte.