본문으로 건너뛰기
최종 수정: 에

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이어야 합니다. 키 길이가 부족하면 zero padding으로 채웁니다. 길이가 초과하면 순환 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 |
+---------------------------------------------------------------------------------+