宣言
AES_ENCRYPT(str,key_str[,init_vector])
説明
キー文字列 key_str を使用して文字列 str を暗号化し、暗号化されたバイナリ文字列を返します。str には長さの制限がなく、この関数は str を自動的に暗号化ブロックの整数倍に補完します。暗号文の長さの計算式は次のとおりです:
16 * (trunc(string_length / 16) + 1)
いずれかの関数パラメータが NULL の場合、この関数は NULL を返します。
AES_ENCRYPT()は、公式のAES(Advanced Encryption Standard)アルゴリズムを使用してデータの暗号化を実装します。AES標準では、さまざまな長さのキーを使用できますが、デフォルトは128ビットです。196ビットまたは256ビットのキー長も使用できます。キー長が長いほどセキュリティは高くなりますが、暗号化速度は低下します。 AES_ENCRYPT() と AES_DECRYPT() 関数は、初期化ベクトルを使用してブロック暗号化モードを制御できます:
block_encryption_modeシステム変数は、ブロックベースの暗号化アルゴリズムのモードを制御するために使用されます。デフォルト値はaes-128-ecbであり、これは128ビットのキー長とECBモードを使用して暗号化することを示します。init_vectorパラメータは初期化ベクトルを表します:暗号化モードで
init_vectorパラメータを設定する必要がある場合、その長さは16バイト以上でなければなりません(16バイトを超える部分は無視されます)。init_vectorが欠落している場合、エラーが発生します。暗号化モードで
init_vectorパラメータを設定する必要がない場合、このパラメータは無視されます。
初期化ベクトルが必要な暗号化モードでは、暗号化と復号化に同じベクトルを使用する必要があります。
obclient> SET block_encryption_mode = 'aes-256-cbc'; obclient> SET @key_str ='My secret passphrase'; obclient> SET @init_vector = '1111111111111111'; obclient> SET @crypt_str = AES_ENCRYPT('text',@key_str,@init_vector); obclient> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector); +-----------------------------------------------+ | AES_DECRYPT(@crypt_str,@key_str,@init_vector) | +-----------------------------------------------+ | text | +-----------------------------------------------+ 1 row in set以下の表に、ブロック暗号化モード、サポートされているSSLライブラリ、および初期化ベクトルパラメータが必要かどうかの詳細情報を示します。
ブロック暗号化モード サポートされるSSLライブラリ 初期化ベクトルが必要か ECB OpenSSL 不要です CBC OpenSSL はい CFB1 OpenSSL はい CFB8 OpenSSL はい CFB128 OpenSSL はい OFB OpenSSL はい
例
'hello world'を暗号化し、鍵は'key'とします。暗号化後の文字列を@passに保存します。obclient> SET @pass=AES_ENCRYPT('hello world', 'key','1111111111111111'); Query OK, 0 rows affected暗号化後の文字列の長さを確認します(すべて2の整数乗です)。
obclient> SELECT CHAR_LENGTH(@pass); +--------------------+ | CHAR_LENGTH(@pass) | +--------------------+ | 16 | +--------------------+ 1 row in setAES_DECRYPT()を使用して復号化します。obclient> SELECT AES_DECRYPT(@pass, 'key'); ERROR 1582 (42000): Incorrect parameter count obclient> SELECT AES_DECRYPT(@pass, 'key','1111111111111111'); +----------------------------------------------+ | AES_DECRYPT(@pass, 'key','1111111111111111') | +----------------------------------------------+ | hello world | +----------------------------------------------+ 1 row in set