From: <da...@co...> - 2003-05-16 01:43:06
|
Hi Brian, This patch (on top of all of my other patches, 00 thru 18, which I can resend to you if you want) implements handling of encrypted databases. The technique for encrypting databases by access appears to be as follows: - each data page except for page 0 (2k pages for jet3, 4k for jet4) is encrypted separately using the RC4 algorithm and with a different key - the key can be obtained by XORing together the following: - the database key, found at offset 0x3e from the start of the file - the 'unencrypted' key, found at offset 0x3e of any unencrypted database (this appears to be 0x4ebc8afb when taking endianness into account) - the page number The existing code already extracted the database key, and XORed it with the number 0xe15e01b9. I don't know where this number came from, but I can imagine there may be more than one 'unencrypted' key. I added the rc4 routines to src/libmdb/file.c. They could be replaced easily with calls to openssl (the interface I used is almost identical to the openssl routines). This works for the one encrypted database I needed to access. YMMV. David P.S. to enable other people to find this post with a search engine I include the following keywords. I had a really hard time finding out information about this topic. msaccess microsoft ac97 access97 mdb dbEncrypt CompactDatabase -- /==============================\ | David Mansfield | | mdb...@db... | \==============================/ |