암호화 함수
암호화 함수 (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.Stringmessage— 인증할 메시지.Stringkey— 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— 복호화 모드.Stringciphertext— 복호화해야 할 암호화된 텍스트.Stringkey— 복호화 키.Stringiv— 선택 사항. 초기화 벡터.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— 암호화 모드.Stringplaintext— 암호화할 텍스트.Stringkey— 암호화 키.key가mode가 요구하는 길이보다 길면 MySQL 특정 키 접기가 수행돼요.Stringiv— 선택 사항. 초기화 벡터. 처음 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— 복호화 모드.Stringciphertext— 복호화해야 할 암호화된 텍스트.Stringkey— 복호화 키.Stringiv— 초기화 벡터.-gcm모드에서 필수, 다른 모드에서는 선택 사항.Stringaad— 추가 인증 데이터(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— 암호화 모드.Stringplaintext— 암호화할 텍스트.Stringkey— 암호화 키.Stringiv— 초기화 벡터.-gcm모드에서 필수, 다른 모드에서는 선택 사항.Stringaad— 추가 인증 데이터. 암호화되지는 않지만 복호화에 영향을 줘요.-gcm모드에서만 동작하고, 다른 모드에서는 예외를 던져요.String
반환 값 (Returned value)
이진 문자열 암호문. String
tryDecrypt
decrypt 함수와 유사하지만, 잘못된 키를 사용해 복호화에 실패하면 NULL을 반환해요.
구문 (Syntax)
tryDecrypt(mode, ciphertext, key[, iv, aad])
인자 (Arguments)
mode— 복호화 모드.Stringciphertext— 복호화해야 할 암호화된 텍스트.Stringkey— 복호화 키.Stringiv— 선택 사항. 초기화 벡터.-gcm모드에서 필수, 다른 모드에서는 선택 사항.Stringaad— 선택 사항. 추가 인증 데이터. 이 값이 틀리면 복호화되지 않아요.-gcm모드에서만 동작하고, 다른 모드에서는 예외를 던져요.String
반환 값 (Returned value)
복호화된 String을 반환하거나, 복호화에 실패하면 NULL. Nullable(String)