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

AES_ENCRYPT

설명​

AES 암호화 함수입니다. 이 함수는 MySQL의 AES_ENCRYPT 함수와 동일하게 동작합니다. 기본 알고리즘은 AES_128_ECB이며, 패딩 모드는 PKCS7입니다.

AES_ENCRYPT 함수는 전달된 키를 바로 사용하지 않고 추가로 가공합니다. 구체적인 단계는 다음과 같습니다:

  1. 사용하는 암호화 알고리즘에 따라 키의 바이트 수를 결정합니다. 예를 들어 AES_128_ECB 알고리즘을 사용하면 키의 바이트 수는 128 / 8 = 16입니다(AES_256_ECB 알고리즘을 사용하면 키의 바이트 수는 256 / 8 = 32입니다).
  2. 그런 다음 사용자가 입력한 키의 i번째 바이트와 16*k+i번째 바이트를 XOR 연산합니다. 사용자가 입력한 키가 16바이트보다 짧으면 끝에 0을 추가합니다.
  3. 마지막으로 새로 생성된 키를 사용하여 암호화합니다.

구문​

AES_ENCRYPT( <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>암호화 알고리즘을 지정하며, 사용 가능한 값은 변수에 제시되어 있습니다.

반환 값​

암호화된 바이너리 데이터를 반환합니다.

예제​

AES_128_ECB 알고리즘 사용

set block_encryption_mode='';
select to_base64(aes_encrypt('text','F3229A0B371ED2D9441B830D21A390C3'));
+----------------------------------------------------------+
| to_base64(aes_encrypt('text', '***', '', 'AES_128_ECB')) |
+----------------------------------------------------------+
| wr2JEDVXzL9+2XtRhgIloA== |
+----------------------------------------------------------+

AES_256_CBC 알고리즘 사용

set block_encryption_mode="AES_256_CBC";
select to_base64(aes_encrypt('text','F3229A0B371ED2D9441B830D21A390C3'));
+----------------------------------------------------------+
| to_base64(aes_encrypt('text', '***', '', 'AES_256_CBC')) |
+----------------------------------------------------------+
| 3dym0E7/+1zbrLIaBVNHSw== |
+----------------------------------------------------------+

AES_256_CBC 알고리즘 사용 및 초기화 벡터 설정

select to_base64(aes_encrypt('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));
+--------------------------------------------------------------------+
| to_base64(aes_encrypt('text', '***', '0123456789', 'AES_256_CBC')) |
+--------------------------------------------------------------------+
| tsmK1HzbpnEdR2//WhO+MA== |
+--------------------------------------------------------------------+