メインコンテンツまでスキップ
に最終更新

SM4_DECRYPT

説明​

SM4 は、金融、通信、電子商取引などで広く使われる国家標準の共通鍵暗号アルゴリズムです。SM4_DECRYPT 関数は SM4 でデータを復号します。デフォルトのアルゴリズムは SM4_128_ECB です。

構文​

SM4_DECRYPT( <str>, <key_str>[, <init_vector>][, <encryption_mode>])

パラメータ​

パラメータ説明
<str>復号するテキスト
<key_str>鍵です。この鍵は十六進数表記ではなく、エンコードされた文字列として指定します。たとえば、128 ビット鍵による暗号化では key_str の長さを 16 にします。鍵が短い場合は ゼロ埋め で補い、長い場合は循環 XOR で最終的な鍵を求めます。たとえば、アルゴリズムで使う 128 ビット鍵を key とすると、key[i] = key_str[i] ^ key_str[i+128] ^ key_str[i+256] ^ ... となります
<init_vector>アルゴリズムで使う初期化ベクトルです。特定のアルゴリズムでのみ有効です。省略すると Doris は組み込みのベクトルを使用します
<encryption_mode>暗号化アルゴリズムの選択肢は変数で指定します

戻り値​

復号に成功した場合は復号されたデータを返します。通常は平文のバイナリ表現です。

復号に失敗した場合は NULL を返します。

使用例​

復号に成功する場合​

デフォルトのアルゴリズムを使用する場合

set block_encryption_mode='';
select SM4_DECRYPT(FROM_BASE64('aDjwRflBrDjhBZIOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');
+--------------------------------------------------------------------------------+
| sm4_decrypt(from_base64('aDjwRflBrDjhBZIOFNw3Tg=='), '***', '', 'SM4_128_ECB') |
+--------------------------------------------------------------------------------+
| text |
+--------------------------------------------------------------------------------+

SM4_128_CBC アルゴリズムを使用する場合

set block_encryption_mode="SM4_128_CBC";
select SM4_DECRYPT(FROM_BASE64('FSYstvOmH2cXy7B/072Mug=='),'F3229A0B371ED2D9441B830D21A390C3');
+--------------------------------------------------------------------------------+
| sm4_decrypt(from_base64('FSYstvOmH2cXy7B/072Mug=='), '***', '', 'SM4_128_CBC') |
+--------------------------------------------------------------------------------+
| text |
+--------------------------------------------------------------------------------+

SM4_128_CBC アルゴリズムと初期化ベクトルを使用する場合

select SM4_DECRYPT(FROM_BASE64('1Y4NGIukSbv9OrkZnRD1bQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');
+------------------------------------------------------------------------------------------+
| sm4_decrypt(from_base64('1Y4NGIukSbv9OrkZnRD1bQ=='), '***', '0123456789', 'SM4_128_CBC') |
+------------------------------------------------------------------------------------------+
| text |
+------------------------------------------------------------------------------------------+

復号に失敗する場合​

set block_encryption_mode='';
select SM4_DECRYPT(FROM_BASE64('aDjwRflBrDjhBZIdOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');
+---------------------------------------------------------------------------------+
| sm4_decrypt(from_base64('aDjwRflBrDjhBZIdOFNw3Tg=='), '***', '', 'SM4_128_ECB') |
+---------------------------------------------------------------------------------+
| NULL |
+---------------------------------------------------------------------------------+