19

So I have been browsing the internet, and came across the MySQL built-in function AES_ENCRYPT. It doesn't seem too hard to use, but some sources tell me to store the encrypted data as a VARCHAR, and some say to store it as a BLOB. What should I store the encrypted data as?

1
  • 1
    Beware that MySQL uses AES in ECB mode. For short strings prefix with a salt for long strings do your encryption outside of mysql. See: en.m.wikipedia.org/wiki/… to see why this is a problem. Commented Sep 18, 2011 at 15:25

4 Answers 4

32

Many encryption and compression functions return strings for which the result might contain arbitrary byte values. If you want to store these results, use a column with a VARBINARY or BLOB binary string data type. This will avoid potential problems with trailing space removal or character set conversion that would change data values, such as may occur if you use a nonbinary string data type (CHAR, VARCHAR, TEXT).

Source: http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html

Sign up to request clarification or add additional context in comments.

Comments

1

If you need to use VARCHAR, rather than BLOB, then convert the encrypted binary to Base64 which only uses printable characters and can be safely stored as VARCHAR. Of course you will need to convert it back from Base64 to binary before decrypting.

Comments

0

I have always used blobs to stored encrypted data in MySQL.

Comments

-1

You can use Binary. BINARY in STRING. It have to work. I am using it. Write me answer if it doesn't working.

Comments