注意
Community Editionは、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 |
+-------------------------------------------------------------------------------------