암호화 함수

암호화 함수 (Encryption functions)

AES(Advanced Encryption Standard) 알고리즘으로 데이터를 암호화·복호화하는 함수 모음이에요. 키 길이는 암호화 모드에 따라 달라져요.

출처: 문서

본문

이 함수들은 AES(Advanced Encryption Standard) 알고리즘으로 데이터의 암호화와 복호화를 구현해요. 키 길이는 암호화 모드에 따라 달라져요: -128-, -196-, -256- 모드에서 각각 16, 24, 32 바이트 길이예요. 초기화 벡터(initialization vector) 길이는 항상 16바이트예요(16을 초과하는 바이트는 무시돼요).

HMAC

지정한 해시 알고리즘과 비밀 키를 사용해 주어진 메시지의 HMAC(Hash-based Message Authentication Code)를 계산해요. 지원하는 해시 알고리즘:

  • blake2b512
  • blake2s256
  • md4
  • md5
  • md5-sha1
  • mdc2
  • ripemd (별칭: RIPEMD160, ripemd)
  • ripemd160
  • rmd160 (별칭: RIPEMD160, rmd160)
  • sha1
  • sha224
  • sha256
  • sha3-224
  • sha3-256
  • sha3-384
  • sha3-512
  • sha384
  • sha512
  • sha512-224
  • sha512-256
  • shake128
  • shake256
  • sm3
  • ssl3-md5 (별칭: MD5, ssl3-md5)
  • ssl3-sha1 (별칭: SHA1, ssl3-sha1)
  • whirlpool

구문 (Syntax)

HMAC(mode, message, key)

인자 (Arguments)

  • mode — 해시 알고리즘 이름(대소문자 구분 없음). 지원: md5, sha1, sha224, sha256, sha384, sha512. String
  • message — 인증할 메시지. String
  • key — HMAC용 비밀 키. String

반환 값 (Returned value)

HMAC 다이제스트를 담은 이진 문자열. String

예제 (Examples)

SELECT hex(HMAC('sha256', 'The quick brown fox jumps over the lazy dog', 'secret_key'));

응답: 31FD15FA0F61FD40DC09D919D4AA5B4141A0B27C1D51E74A6789A890AAAA187C

SELECT
    hex(HMAC('md5', 'message', 'key')) AS hmac_md5,
    hex(HMAC('sha1', 'message', 'key')) AS hmac_sha1,
    hex(HMAC('sha256', 'message', 'key')) AS hmac_sha256;

aes_decrypt_mysql

MySQL의 AES_ENCRYPT 함수로 암호화된 데이터를 복호화해요. 동일한 입력에 대해 decrypt와 같은 평문을 생성해요. key 또는 iv가 정상보다 길면 aes_decrypt_mysql은 MySQL의 aes_decrypt가 하는 방식, 즉 key를 '접어(fold)' 사용하고 IV의 여분 비트는 무시해요. 지원하는 복호화 모드:

  • aes-128-ecb, aes-192-ecb, aes-256-ecb
  • aes-128-cbc, aes-192-cbc, aes-256-cbc
  • aes-128-cfb128
  • aes-128-ofb, aes-192-ofb, aes-256-ofb

구문 (Syntax)

aes_decrypt_mysql(mode, ciphertext, key[, iv])

인자 (Arguments)

  • mode — 복호화 모드. String
  • ciphertext — 복호화해야 할 암호화된 텍스트. String
  • key — 복호화 키. String
  • iv — 선택 사항. 초기화 벡터. String

반환 값 (Returned value)

복호화된 String. String

aes_encrypt_mysql

MySQL의 AES_ENCRYPT 함수와 같은 방식으로 텍스트를 암호화해요. 결과 암호문은 MySQL의 AES_DECRYPT 함수로 복호화할 수 있어요. 동일한 입력에 대해 encrypt 함수와 같은 암호문을 생성해요. key 또는 iv가 정상보다 길면 aes_encrypt_mysql은 MySQL의 aes_encrypt가 하는 방식, 즉 key를 '접어' 사용하고 iv의 여분 비트는 무시해요. 지원하는 암호화 모드:

  • aes-128-ecb, aes-192-ecb, aes-256-ecb
  • aes-128-cbc, aes-192-cbc, aes-256-cbc
  • aes-128-ofb, aes-192-ofb, aes-256-ofb

구문 (Syntax)

aes_encrypt_mysql(mode, plaintext, key[, iv])

인자 (Arguments)

  • mode — 암호화 모드. String
  • plaintext — 암호화할 텍스트. String
  • key — 암호화 키. keymode가 요구하는 길이보다 길면 MySQL 특정 키 접기가 수행돼요. String
  • iv — 선택 사항. 초기화 벡터. 처음 16바이트만 고려돼요. String

반환 값 (Returned value)

암호문 이진 문자열. String

decrypt

다음 모드를 사용해 AES로 암호화된 이진 문자열을 복호화해요:

  • aes-128-ecb, aes-192-ecb, aes-256-ecb
  • aes-128-cbc, aes-192-cbc, aes-256-cbc
  • aes-128-ofb, aes-192-ofb, aes-256-ofb
  • aes-128-gcm, aes-192-gcm, aes-256-gcm
  • aes-128-ctr, aes-192-ctr, aes-256-ctr
  • aes-128-cfb, aes-128-cfb1, aes-128-cfb8

구문 (Syntax)

decrypt(mode, ciphertext, key[, iv, aad])

인자 (Arguments)

  • mode — 복호화 모드. String
  • ciphertext — 복호화해야 할 암호화된 텍스트. String
  • key — 복호화 키. String
  • iv — 초기화 벡터. -gcm 모드에서 필수, 다른 모드에서는 선택 사항. String
  • aad — 추가 인증 데이터(additional authenticated data). 이 값이 틀리면 복호화되지 않아요. -gcm 모드에서만 동작하고, 다른 모드에서는 예외를 던져요. String

반환 값 (Returned value)

복호화된 평문. String

encrypt

다음 모드 중 하나를 사용해 AES로 평문을 암호문으로 암호화해요:

  • aes-128-ecb, aes-192-ecb, aes-256-ecb
  • aes-128-cbc, aes-192-cbc, aes-256-cbc
  • aes-128-ofb, aes-192-ofb, aes-256-ofb
  • aes-128-gcm, aes-192-gcm, aes-256-gcm
  • aes-128-ctr, aes-192-ctr, aes-256-ctr
  • aes-128-cfb, aes-128-cfb1, aes-128-cfb8

구문 (Syntax)

encrypt(mode, plaintext, key[, iv, aad])

인자 (Arguments)

  • mode — 암호화 모드. String
  • plaintext — 암호화할 텍스트. String
  • key — 암호화 키. String
  • iv — 초기화 벡터. -gcm 모드에서 필수, 다른 모드에서는 선택 사항. String
  • aad — 추가 인증 데이터. 암호화되지는 않지만 복호화에 영향을 줘요. -gcm 모드에서만 동작하고, 다른 모드에서는 예외를 던져요. String

반환 값 (Returned value)

이진 문자열 암호문. String

tryDecrypt

decrypt 함수와 유사하지만, 잘못된 키를 사용해 복호화에 실패하면 NULL을 반환해요.

구문 (Syntax)

tryDecrypt(mode, ciphertext, key[, iv, aad])

인자 (Arguments)

  • mode — 복호화 모드. String
  • ciphertext — 복호화해야 할 암호화된 텍스트. String
  • key — 복호화 키. String
  • iv — 선택 사항. 초기화 벡터. -gcm 모드에서 필수, 다른 모드에서는 선택 사항. String
  • aad — 선택 사항. 추가 인증 데이터. 이 값이 틀리면 복호화되지 않아요. -gcm 모드에서만 동작하고, 다른 모드에서는 예외를 던져요. String

반환 값 (Returned value)

복호화된 String을 반환하거나, 복호화에 실패하면 NULL. Nullable(String)

더 알아보기 (Learn more)