Skip to content

Support AES-256 encrypt and decrypt functions on mysql and mariadb

License

GPL-2.0, GPL-2.0 licenses found

Licenses found

GPL-2.0
LICENSE
GPL-2.0
COPYING
Notifications You must be signed in to change notification settings

Joungkyun/lib_mysqludf_aes256

Repository files navigation

lib_mysqludf_aes256

Build Status GitHub license

Support AES 128/192/256 encrypt and decrypt on MySQL and Maraidb with User Defined Function.

License

Copyright (c) 2020 JoungKyun.Kim <http://oops.org> All rights reserved. This program is under GPL v2

Requirements

MySQL <= 5.7
Mariadb <= 10.5

From the version MySQL 5.6.17 and later, you can encode to AES-256 with AES_ENCRYPT function using the block_encryption_mode global variable. see also http://mysqlblog.fivefarmers.com/2014/03/27/mysql-5-6-17-now-with-better-encryption/. And from version 5.7.4 and later, you can encode to AES-256 with AES_ENCRYPT using 32byte key lentgh. MariaDB does not yet support thie features.

Usage

  • AES 128 encrypt and decrypt
    • key length : 16byte
    • If the length of the key is 16byte, AES256_ENCRYPT will operate in the same way as AES_ENCRYPT.
mysql> select HEX(AES256_ENCRYPT('strings', '0123456789abcdef'));
mysql> select AES256_DECRYPT(UNHEX('encrypted_hash_string'), '0123456789abcdef');
  • AES 192 encrypt and decrypt
    • key length : 24byte
mysql> select HEX(AES256_ENCRYPT('strings', '0123456789abcdef01234567'));
mysql> select AES256_DECRYPT(UNHEX('encrypted_hash_string'), '0123456789abcdef01234567');
  • AES 256 encrypt and decrypt
    • key length : 32byte
mysql> select HEX(AES256_ENCRYPT('strings', '0123456789abcdef0123456789abcdef'));
mysql> select AES256_DECRYPT(UNHEX('encrypted_hash_string'), '0123456789abcdef0123456789abcdef');

Installation

  • Build and installation
[root@host lib_mysqludf_aes256]$ ./configure \
        --with-mysql=@MYSQL_PREFIX@ \
        --with-mysql-config=@MYSQL_PREFIX@/bin/mysql_config
[root@host lib_mysqludf_aes256]$ make
[root@host lib_mysqludf_aes256]$ make install

Before 1.0.4, you must use --with-mysql-plugins-dir instead of --with-mysql-config options.

[root@host lib_mysqludf_aes256]$ ./configure \
        --with-mysql=@MYSQL_PREFIX@ \
        --with-mysql-plugins-dir="$(mysql_config --plugindir)"

If you want to check installed files, you can test install as follow.

[root@host lib_mysqludf_aes256]$ make test-install
[root@host lib_mysqludf_aes256]$ # OR
[root@host lib_mysqludf_aes256]$ make install DESTDIR=$(pwd)/z
[root@host lib_mysqludf_aes256]$ # chcek test-install files
[root@host lib_mysqludf_aes256]$ tree z # or find ./z
  • Regist AES256_ENCRYPT/AES256_DECRYPT UDF
[root@host lib_mysqludf_aes256]$ mysql < docs/aes256_install.sql
  • Unregist AES256_ENCRYPT/AES256_DECRYPT UDF
[root@host lib_mysqludf_aes256]$ mysql < docs/aes256_uninstall.sql

After installation, aes256_install.sql and aes256_uninstall.sql are located in PREFIX/share/doc/lib_mysqludf_aes256-@VERSION@/.

Language API

This UDF function will operate in the same way with follow apis:

Credits

JoungKyun.Kim