This is of slight concern and I think it should be a high priority.
Right now credit card numbers are being stored (if chosen to be saved in the db, of course) as unfiltered numbers. I would recommend using an md5 or other type of encrypt() using md5/SALT and a random string, configurable only from within a settings file, and storing the data as a Binary BLOB. This ensures the most protection in case of unwarranted access to payment history / customer card information.
And of course it's easy enough to decrypt back and forth, as long as you have the key, so that during processing between admin and payment gateways you can still send out the actual card number.
I have code I can recycle from our current shopping cart system that uses a pretty solid method of encryption (and it's easy enough to change the encryption key). This is something I would need pretty much ASAP (and I can't imagine anyone else who wouldn't want this). Let me know your thoughts.





Once encryption is complete I'll make a separate post about it instructing users on how to best protect themselves and their customers from fraud.



Just FYI, checking the "do not store card numbers, even at checkout" works great for us at the moment. Since it only stores the last four digits of a card, I'm still able to process the payment as well as issue refunds to users when they need it. But I can't remember if that's the default, or if the default is to store the entire number. (It's been a while since I installed UC).
In any case I think if someone is storing the entire number there should be encryption in place; you may even consider encrypting anything that gets stored in the cc_number column.
Help directly fund development: Donate via PayPal!