暗号化関数
これらの関数は、AES (Advanced Encryption Standard) アルゴリズムを使用してデータの暗号化および復号を行います。
鍵長は暗号化モードに依存し、-128-、-196-、-256- 各モードに対してそれぞれ 16、24、32 バイトです。
初期化ベクトル (initialization vector) の長さは常に 16 バイトであり、16 バイトを超える部分は無視されます。
HMAC
導入バージョン: v25.12.0
指定したハッシュアルゴリズムと秘密鍵を使用して、指定したメッセージの HMAC (Hash-based Message Authentication Code) を計算します。
サポートされているハッシュアルゴリズム:
- blake2b512
- blake2s256
- md4
- md5
- md5-sha1
- mdc2
- ripemd (別名: RIPEMD160, ripemd)
- ripemd160
- rmd160 (別名: RIPEMD160, rmd160)
- sha1
- sha224
- sha256
- sha3-224
- sha3-256
- sha3-384
- sha3-512
- sha384
- sha512
- sha512-224
- sha512-256
- shake128
- shake256
- sm3
- ssl3-md5 (別名: MD5, ssl3-md5)
- ssl3-sha1 (別名: SHA1, ssl3-sha1)
- whirlpool
構文
引数
mode— ハッシュアルゴリズム名 (大文字小文字は区別されません) 。サポートされる値: md5, sha1, sha224, sha256, sha384, sha512。Stringmessage— 認証対象のメッセージ。Stringkey— HMAC 用の秘密鍵。String
戻り値
HMAC ダイジェストを含むバイナリ文字列を返します。String
例
基本的な HMAC-SHA256
異なるハッシュアルゴリズム
大文字と小文字を区別しないモード
aes_decrypt_mysql
導入バージョン: v20.12.0
MySQL の AES_ENCRYPT 関数で暗号化されたデータを復号します。
同じ入力に対しては、decrypt と同じ平文を返します。
key または iv が本来の長さより長い場合、aes_decrypt_mysql は MySQL の aes_decrypt と同様に動作し、key を折りたたみ、iv の余分なビットは無視します。
次の復号モードをサポートします:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-cfb128
- aes-128-ofb, aes-192-ofb, aes-256-ofb
構文
引数
戻り値
復号済みの文字列を返します。String
例
MySQL データの復号
aes_encrypt_mysql
導入バージョン: v20.12.0
MySQL の AES_ENCRYPT 関数と同じ方法でテキストを暗号化します。
生成された暗号文は、MySQL の AES_DECRYPT 関数で復号できます。
同じ入力に対しては、encrypt 関数と同じ暗号文を生成します。
key または iv が本来の長さより長い場合、aes_encrypt_mysql は MySQL の aes_encrypt と同様に動作し、key を折りたたんで利用し、iv の余分なビットは無視します。
サポートされている暗号化モードは次のとおりです。
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
構文
引数
mode— 暗号化モード。Stringplaintext— 暗号化するテキスト。Stringkey— 暗号鍵。modeが要求する長さより長い場合、MySQL 固有のキー折り畳み処理が行われます。Stringiv— 任意。初期化ベクトル。先頭 16 バイトのみが使用されます。String
戻り値
暗号文のバイナリ文字列。String
使用例
同一入力の比較
長いキーを指定すると Encrypt が失敗する
MySQL 互換性
より長い IV でも結果は同じ
decrypt
導入バージョン: v20.12.0
この関数は、以下のモードを使用して AES で暗号化されたバイナリ文字列を復号します。
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
- aes-128-gcm, aes-192-gcm, aes-256-gcm
- aes-128-ctr, aes-192-ctr, aes-256-ctr
- aes-128-cfb, aes-128-cfb1, aes-128-cfb8
構文
引数
mode— 復号モード。Stringciphertext— 復号する暗号化されたテキスト。Stringkey— 復号用キー。Stringiv— 初期化ベクトル。-gcmモードでは必須、それ以外では任意。Stringaad— 追加認証データ。この値が正しくない場合は復号できません。-gcmモードでのみ有効で、それ以外では例外をスローします。String
戻り値
復号された平文を返します。String
例
暗号化データを正しく復号する
暗号化データを誤って復号する
encrypt
導入: v20.12.0
平文を、以下のいずれかのモードで AES を用いて暗号化します。
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
- aes-128-gcm, aes-192-gcm, aes-256-gcm
- aes-128-ctr, aes-192-ctr, aes-256-ctr
- aes-128-cfb, aes-128-cfb1, aes-128-cfb8
構文
引数
mode— 暗号化モード。Stringplaintext— 暗号化対象のテキスト。Stringkey— 暗号鍵。Stringiv— 初期化ベクトル。-gcmモードでは必須で、それ以外では任意。Stringaad— 追加認証データ。これは暗号化はされませんが、復号に影響します。-gcmモードでのみ有効で、それ以外では例外をスローします。String
戻り値
バイナリ文字列の暗号文を返します。String
例
暗号化の例
GCM モードの例
tryDecrypt
導入: v22.10.0
decrypt 関数と似ていますが、誤ったキーにより復号に失敗した場合は NULL を返します。
構文
引数
mode— 復号モード。Stringciphertext— 復号対象の暗号化テキスト。Stringkey— 復号キー。Stringiv— 任意。初期化ベクトル。-gcmモードでは必須で、その他のモードでは任意。Stringaad— 任意。追加認証データ。この値が正しくない場合は復号されません。-gcmモードでのみ有効で、その他のモードでは例外をスローします。String
戻り値
復号された String を返すか、復号に失敗した場合は NULL を返します。Nullable(String)
例
テーブルを作成してデータを挿入