注意
コミュニティエディションは、sm4_encrypt システム関数をサポートしていません。
宣言
SM4_ENCRYPT(str,key_str[,init_vector])
説明
キーテキスト key_str を使用して文字列 str を暗号化し、暗号化されたバイナリ文字列を返します。str には長さの制限がなく、この関数は str を自動的に暗号ブロックの整数倍にパディングします。暗号文の長さは以下の式で計算されます:
16 * (trunc(string_length / 16) + 1)
いずれかの関数パラメータが NULL の場合、この関数は NULL を返します。
SM4を使用してデータを暗号化します。SM4は中国国家密码管理局が公表したブロック暗号方式で、アルゴリズムは公開されており、ブロック長と鍵長はどちらも128ビットです。鍵長が長いほどセキュリティは高まりますが、暗号化速度は低下します。
SM4_ENCRYPT() 関数は、初期化ベクトルを使用してブロック暗号モードを制御できます:
block_encryption_mode システム変数は、ブロックベースの暗号アルゴリズムのモードを制御します。デフォルト値は
aes-128-ecbで、128ビットの鍵長とECBモードを使用して暗号化することを意味します。init_vectorパラメータは初期化ベクトルを表します:暗号化モードで
init_vectorパラメータの設定が必要な場合、その長さは16バイト以上である必要があります(16バイトを超える部分は無視されます)。init_vectorが欠けている場合、エラーが発生します。暗号化モードで
init_vectorパラメータの設定が不要な場合、このパラメータは無視されます。
例
sm4-ecbモードでは、SM4_ENCRYPTは2つのパラメータ{str, key_str}を受け取ります。3つの値を渡した場合、3番目の値は無視されます。例:
SET block_encryption_mode = 'sm4-ecb';
SELECT hex(sm4_encrypt('asdasdasdasd', '12312313123')) FROM dual;
+--------------------------------------------------------------------------------------------------+
| hex(sm4_encrypt('asdasdasdasd', '12312313123')) |
+--------------------------------------------------------------------------------------------------+
| E0640595B963E365A70CB24DC8A3E349 |
+--------------------------------------------------------------------------------------------------+
SELECT hex(sm4_encrypt('asdasdasdasd', '12312313123', 'asdasdkljasdkljalskdjaklsdjaklsjdaklsdjlaksdj')) FROM dual;
+--------------------------------------------------------------------------------------------------+
| hex(sm4_encrypt('asdasdasdasd', '12312313123', 'asdasdkljasdkljalskdjaklsdjaklsjdaklsdjlaksdj')) |
+--------------------------------------------------------------------------------------------------+
| E0640595B963E365A70CB24DC8A3E349 |
+--------------------------------------------------------------------------------------------------+
sm4-cbc、sm4-cfb、sm4-ofbモードでは、SM4_ENCRYPTは3つのパラメータのみを受け取ります。例:
SELECT hex(sm4_encrypt('asdasdasdasd', '12312313123', 'asdasdkljasdkljalskdjaklsdjaklsjdaklsdjlaksdj')) FROM dual;
+--------------------------------------------------------------------------------------------------+
| hex(sm4_encrypt('asdasdasdasd', '12312313123', 'asdasdkljasdkljalskdjaklsdjaklsjdaklsdjlaksdj')) |
+--------------------------------------------------------------------------------------------------+
| 646B83FDA4E969244E2B9BD835578D50 |
+-------------------------------------------------------------------------------------