This is written for GNU/Linux, I don't know if all the same information holds for other systems.
When you run bitcoind or bitcoin-qt (the two main clients) it creates ~/.bitcoin with some files in it. The biggest are the blk0001.dat and blk0002.dat files (together about 2.6 GB as of Aug 2012), these files are "raw" dumps of transaction history blocks.
wallet.dat and blkindex.dat (800 MB as of Aug 2012) are both Berkeley DB files. This is a library for dealing with big database files, it's got some useful command line tools
http://docs.oracle.com/cd/E17076_02/html/api_reference/C/utilities.htmlwallet.dat encryption: When you enable password encryption it uses AES-256-CBC encryption with a password derived from your password using iterated sha512 on the private keys fields only (source
https://github.com/bitcoin/bitcoin/blob/master/src/crypter.cpp ). All private keys or none will be encrypted in a given wallet. You can still add new addresses to an encrypted wallet without a password (because they were already stored in there with encryption, getnewaddress just reveals them one by one) until you use up the address pool, you need to unlock it with the password to refill the pool of addresses.
blkindex.dat bitcointools: There are some python scripts here
https://github.com/gavinandresen/bitcointools/ which can read the parse the index data base file, but I had some errors about database version when I tried to use it. The solution is to use
db_dump ~/.bitcoin/blkindex.dat | db_read ~/foo/blxindex.dat to create a new version of blxindex.dat that bitcoin tools will be ok with, you can also cd into foo and
ln -s ~/.bitcoin/blk0001.dat blk0001.dat both the block files (since they aren't berkeley db files) in order to use bitcointools. You may also need to use the
db_recover command when moving between use of the C++ programs and the python ones.