12.13 암호화 함수와 압축 함수
표 12.17 암호화 함수
이름 | 설명 |
---|---|
AES_DECRYPT () | AES를 사용하여 해독합니다 |
AES_ENCRYPT () | AES를 사용하여 암호화합니다 |
COMPRESS () | 이진 문자열로 결과를 반환합니다 |
DECODE () | ENCODE ()를 사용하여 암호화 된 문자열을 디코딩합니다 |
DES_DECRYPT () | 문자열을 해독합니다 |
DES_ENCRYPT () | 문자열을 암호화합니다 |
ENCODE () | 문자열을 인코딩합니다 |
ENCRYPT () | 문자열을 암호화합니다 |
MD5 () | MD5 체크섬을 계산합니다 |
OLD_PASSWORD() (deprecated 5.6.5) | 4.1 이전 PASSWORD 구현의 값을 돌려줍니다 |
PASSWORD () | 암호 문자열을 계산하여 반환합니다 |
RANDOM_BYTES () | 임의의 바이트 벡터를 반환합니다 |
SHA1() , SHA() | SHA-1 160 비트 체크섬을 계산합니다 |
SHA2 () | SHA-2 체크섬을 계산합니다 |
UNCOMPRESS () | 압축 된 문자열을 압축 해제합니다 |
UNCOMPRESSED_LENGTH () | 압축 이전의 문자열 길이를 반환합니다 |
VALIDATE_PASSWORD_STRENGTH () | 암호의 강도를 판단합니다 |
많은 암호화 함수와 압축 함수는 결과에 임의의 바이트 값이 포함되어있을 가능성이있는 문자열이 반환됩니다. 이러한 결과를 저장할 경우, VARBINARY
또는 BLOB
이진 문자열 데이터 유형의 컬럼을 사용합니다. 이는 후행 공백을 제거하고 문자 세트를 변환하거나하면 데이터 값이 변경 될 가능성이 있다는 문제를 해결할 수 있습니다. 예를 들어, 비 이진 문자열 데이터 형식 ( CHAR
, VARCHAR
, TEXT
)을 사용하는 경우에 이러한 문제가 발생할 수 있습니다.
일부 암호화 함수는 ASCII 문자 ( MD5()
, OLD_PASSWORD()
, PASSWORD()
, SHA()
, SHA1()
, SHA2()
) 문자열이 반환됩니다. MySQL 5.6의 경우 반환 값은 character_set_connection
및 collation_connection
시스템 변수에서 결정된 문자 집합 및 정렬 순서를 포함한 비 이진 문자열입니다.
MD5()
또는 SHA1()
등의 함수가 바이너리 문자열로 16 진수 문자열을 반환 버전에서는 반환 값을 대문자로 변환하거나 대문자와 소문자가 구별되지 않는 방법으로 그대로 비교할 수 없습니다. 값을 비 이진 문자열로 변환해야합니다. 섹션 12.10 「캐스트 함수 및 연산자 " 에서 이진 문자열 변환의 설명을 참조하십시오.
응용 프로그램에서 16 진수 문자열을 반환하는 함수 ( MD5()
또는 SHA1()
등)에서 값을 저장하려면 UNHEX()
를 사용하여 16 진수 표현을 바이너리로 변환 해, 그 결과를 BINARY(
컬럼에 저장하면보다 효율적인 저장 및 비교를 제공합니다. 16 진수의 각 쌍에는 바이너리 형식으로 1 바이트가 필요하기 때문에, N
)N
의 값은 16 진수 문자열의 길이에 따라 다릅니다. N
은 MD5()
값의 경우 16, SHA1()
의 경우는 20입니다. SHA2()
의 경우 N
의 범위는 결과의 원하는 비트 길이를 지정하는 인수에 따라 28에서 32까지입니다.
utf8
문자 집합 (문자마다 4 바이트 사용됩니다)이 사용되는 컬럼에 값이 포함되는 경우, 16 진수 문자열을 CHAR
컬럼에 저장할 때 크기의 페널티는 최소 2 회, 최대 8 회입니다. 또한 문자열을 저장하면 값이 커지고, 문자 집합의 데이터 정렬 규칙을 고려할 필요가 있기 때문에 비교가 느려집니다.
응용 프로그램에서 MD5()
문자열 값을 CHAR(32)
컬럼에 저장된다고 가정합니다.
CREATE TABLE md5_tbl (md5_val CHAR (32), ...); INSERT INTO md5_tbl (md5_val, ...) VALUES (MD5 ( 'abcdef'), ...);
16 진수 문자열을보다 컴팩트 한 형식으로 변환하려면 다음과 같이 대신 UNHEX()
및 BINARY(16)
가 사용되도록 응용 프로그램을 변경합니다.
CREATE TABLE md5_tbl (md5_val BINARY (16), ...); INSERT INTO md5_tbl (md5_val, ...) VALUES (UNHEX (MD5 ( 'abcdef')) ...);
해쉬 함수가 두 개의 다른 입력 값에 같은 값을 생성하는 매우 드문 경우에 대응할 수 있도록 응용 프로그램이 준비 될 것입니다. 충돌을 감지하는 방법의 하나는 해시 컬럼을 기본 키로하는 것입니다.
MD5 및 SHA-1 알고리즘의 악용 알려져 있습니다. 대신,이 섹션에서 설명하는 기타 암호화 함수 ( SHA2()
등) 중 하나를 사용하는 것을 고려하십시오.
SSL 연결을 사용하지 않으면 암호화 함수의 인수로 지정된 암호 및 기타 기밀 값은 일반 텍스트로 MySQL 서버로 전송됩니다. 또한 이러한 값은 기록 할 MySQL 로그에 표시됩니다. 이러한 유형의 노출을 방지하기 위해 응용 프로그램은 클라이언트 측에서 비밀 값을 암호화하고 서버에 전송할 수 있습니다. 같은 고려 사항이 암호화 키에도 적용됩니다. 이러한 노출을 방지하기 위해 응용 프로그램은 저장 프로 시저를 사용하여 서버 측에서 값을 암호화하고 해독 할 수 있습니다.
AES_DECRYPT (
crypt_str
,key_str
[,init_vector
)이 함수는 공식의 AES (Advanced Encryption Standard) 알고리즘을 사용하여 데이터를 해독합니다. 자세한 내용은
AES_ENCRYPT()
의 설명을 참조하십시오.MySQL 5.6.17 시점에서는 옵션의 초기화 벡터 인수
init_vector
를 사용할 수 있습니다. 그 버전은AES_DECRYPT()
가 사용되는 문은 문 기반 복제에 대해 안전하지 쿼리 캐시에 저장할 수 없습니다.AES_ENCRYPT (
str
,key_str
[,init_vector
)AES_ENCRYPT()
및AES_DECRYPT()
는 AES (Advanced Encryption Standard) 알고리즘 (이전에는 "Rijndael"라고했습니다)를 사용한 데이터 암호화 및 복호화가 구현됩니다. AES 표준은 다양한 키의 길이가 허용됩니다. 기본적으로 이러한 함수에서 키 길이가 128 비트 AES가 구현됩니다. MySQL 5.6.17 시점에서 나중에 설명하도록 사용할 수있는 키의 길이는 196 또는 256 비트입니다. 키의 길이는 성능과 보안 사이에서 트레이드 오프입니다.AES_ENCRYPT()
는 키 문자열key_str
를 사용하여 문자열str
을 암호화하고 암호화 된 출력을 포함한 바이너리 문자열을 반환합니다.AES_DECRYPT()
는 키 문자열key_str
를 사용하여 암호화 된 문자열crypt_str
을 해독하고 원래 일반 텍스트 문자열을 반환합니다. 함수 인수 중 하나가NULL
의 경우, 함수에서NULL
이 반환됩니다.str
및crypt_str
인수는 임의의 길이로 할 수 있으며, AES 등의 블록 기반의 알고리즘은 필요에 따라 블록의 배수가되도록 자동으로 패딩이str
에 추가됩니다. 이 패딩은AES_DECRYPT()
함수에 의해 자동으로 삭제됩니다.crypt_str
의 길이는 다음 공식을 사용하여 계산할 수 있습니다.16 * (trunc (
string_length
/ 16) + 1)키 길이가 128 비트 인 경우
key_str
인수에 열쇠를 건네주는 가장 안전한 방법은 완전히 임의의 128 비트 값을 생성하고 그것을 이진 값으로 전달됩니다. 예 :INSERT INTO t VALUES (1, AES_ENCRYPT ( 'text', UNHEX ( 'F3229A0B371ED2D9441B830D21A390C3')));
암호를 사용하면 암호를 해시하여 AES 키를 생성 할 수 있습니다. 예 :
INSERT INTO t VALUES (1, AES_ENCRYPT ( 'text', SHA2 ( 'My secret passphrase', 512)));
암호 또는 암호는 직접
crypt_str
에 전달하지 않고 먼저 해시하십시오. 이 문서의 이전 버전에서는 기존의 접근 방식이 제안되고 있었지만, 여기에 예제가 더 안전하기 때문에 권장되지 않습니다.AES_DECRYPT()
에서 잘못된 날짜 또는 부정한 패딩이 검출 된 경우는NULL
이 반환됩니다. 그러나 입력 데이터 또는 키가 무효가되어있는 경우,AES_DECRYPT()
에서NULL
이 아닌 값 (쓰레기 가능성도 있습니다)가 반환 될 수 있습니다.MySQL 5.6.17 시점에서는
AES_ENCRYPT()
및AES_DECRYPT()
에서 블록 암호화 모드의 제어가 허용되는 옵션init_vector
초기화 벡터 인수가 지정됩니다.block_encryption_mode
시스템 변수는 블록 기반의 암호화 알고리즘의 모드를 제어합니다. 기본값은 128 비트의 키 길이와 ECB 모드를 사용하여 암호화를 나타내는aes-128-ecb
입니다. 이 변수에 허용되는 값은 섹션 5.1.4 "서버 시스템 변수" 를 참조하십시오.옵션
init_vector
인수는 필요로하는 블록 암호화 모드를 지원하는 초기화 벡터가 제공됩니다.
옵션
init_vector
인수가 필요한 모드에서는 16 바이트 이상의 길이로해야합니다 (16 이상의 바이트는 무시됩니다).init_vector
이 누락 된 경우 오류가 발생합니다.init_vector
이 필요없는 모드에서는 이것이 무시되고 지정된 경우 경고가 생성됩니다.RANDOM_BYTES(16)
를 호출하면 초기화 벡터에 사용되는 바이트 무작위 문자열을 생성 할 수 있습니다. 초기화 벡터가 필요한 암호화 모드에서 암호화 및 복호화에 동일한 벡터를 사용해야합니다.mysql>
SET block_encryption_mode = 'aes-256-cbc';
mysql>SET @key_str = SHA2('My secret passphrase',512);
mysql>SET @init_vector = RANDOM_BYTES(16);
mysql>SET @crypt_str = AES_ENCRYPT('text',@key_str,@init_vector);
mysql>SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);
+-----------------------------------------------+ | AES_DECRYPT(@crypt_str,@key_str,@init_vector) | +-----------------------------------------------+ | text | +-----------------------------------------------+다음 표에는 허용되는 각 블록 암호화 모드 지원되는 SSL 라이브러리 및 초기화 벡터 인수가 필수인지 여부를 표시합니다.
블록 암호화 모드 모드가 지원되는 SSL 라이브러리 초기화 벡터가 필요 ECB OpenSSL, yaSSL 아니오 CBC OpenSSL, yaSSL 예 CFB1 OpenSSL 예 CFB8 OpenSSL 예 CFB128 OpenSSL 예 OFB OpenSSL 예 MySQL 5.6.17에서는
AES_ENCRYPT()
또는AES_DECRYPT()
가 사용되는 문은 문 기반 복제에 대해 안전하지 쿼리 캐시에 저장할 수 없습니다.COMPRESS (
string_to_compress
)문자열을 압축하고 그 결과를 바이너리 문자열로 반환합니다. 이 함수를 사용하려면 MySQL이
zlib
등의 압축 라이브러리를 사용하여 컴파일되어 있어야합니다. 그렇지 않으면 반환 값은 항상NULL
입니다. 압축 된 문자열은UNCOMPRESS()
를 사용하여 압축을 해제 할 수 있습니다.mysql>
SELECT LENGTH(COMPRESS(REPEAT('a',1000)));
-> 21 mysql>SELECT LENGTH(COMPRESS(''));
-> 0 mysql>SELECT LENGTH(COMPRESS('a'));
-> 13 mysql>SELECT LENGTH(COMPRESS(REPEAT('a',16)));
-> 15압축 된 문자열의 내용은 다음의 방법으로 저장됩니다.
빈 문자열은 빈 문자열로 저장됩니다.
비어 있지 않은 문자열은 4 바이트 길이의 압축되지 않은 문자열로 저장됩니다 (낮은 바이트가 1 번째) 그 후에 압축 된 문자열이 계속됩니다. 문자열이 공백 문자로 끝나는 경우는 결과가
CHAR
또는VARCHAR
컬럼에 저장되어 있어도 후행 공백 문자가 삭제되는 문제가 해결되도록 ".
"문자가 추가됩니다. (단,CHAR
와VARCHAR
등의 비 이진 문자열 데이터 형식을 사용하여 압축 된 문자열을 저장하면 문자 집합 변환이 발생할 가능성이 있기 때문에 어떤 경우에도 권장되지 않습니다. 대신,VARBINARY
또는BLOB
이진 문자열 컬럼을 사용하십시오.)
DECODE (
crypt_str
,pass_str
)암호화 된 문자열
crypt_str
암호로pass_str
를 사용하여 해독합니다.crypt_str
는ENCODE()
에서 반환 된 문자열하도록하십시오.DES_DECRYPT (
crypt_str
[,key_str
)DES_ENCRYPT()
를 사용하여 암호화 된 문자열을 해독합니다. 오류가 발생하면이 함수는NULL
을 반환합니다.이 함수는 MySQL이 SSL 지원으로 구성되어있는 경우에만 작동합니다. 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오.
key_str
인수가 지정되어 있지 않은 경우,DES_DECRYPT()
는 암호화 된 문자열의 첫 번째 바이트를 조사하여 원래의 문자열을 암호화 할 때 사용한 DES 키 번호를 특정하고 DES 키 파일에서 메시지를 해독하는 열쇠를 읽습니다. 이 기능은 사용자가SUPER
권한을 가지고 있어야합니다. 키 파일은--des-key-file
서버 옵션을 사용하여 지정할 수 있습니다.이 함수를
key_str
인수에 전달하면 그 문자열이 메시지를 해독하는 열쇠로 사용됩니다.crypt_str
인수가 암호화 된 문자열로 표시되지 않는 경우, MySQL에서는 지정된crypt_str
가 반환됩니다.DES_ENCRYPT (
str
[, {key_num
|key_str
}])Triple-DES 알고리즘을 사용하여 지정된 열쇠로 문자열을 암호화합니다.
이 함수는 MySQL이 SSL 지원으로 구성되어있는 경우에만 작동합니다. 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오.
사용하는 암호화 키는 지정된 경우,
DES_ENCRYPT()
에 두 번째 인수에 따라 선택됩니다. 인수를 붙이지 않는 경우는 DES 키 파일의 첫 번째 키가 사용됩니다.key_num
인수를 지정하면 DES 키 파일의 지정된 열쇠 번호 (0 - 9)가 사용됩니다.key_str
인수를 지정하면 지정된 키 문자열을 사용하여str
이 암호화됩니다.키 파일은
--des-key-file
서버 옵션을 사용하여 지정할 수 있습니다.반환되는 문자열은 첫 번째 문자가
CHAR(128 |
인 이진 문자열입니다. 오류가 발생한 경우key_num
)DES_ENCRYPT()
은NULL
을 반환합니다.암호화 된 키를 인식하기 쉽게하기 위해 128이 추가됩니다. 문자열 키를 사용하는 경우
key_num
는 127입니다.결과 문자열의 길이는 다음 공식으로 지정됩니다.
new_len
=orig_len
+ (8 - (orig_len
% 8)) + 1DES 키 파일의 각 행의 형식은 다음과 같습니다.
key_num
des_key_str
각
key_num
값은0
에서9
까지의 범위 내의 숫자로해야합니다. 파일의 행은 임의의 순서로 지정할 수 있습니다.des_key_str
는 메시지를 암호화하는 데 사용되는 문자열입니다. 숫자와 키 사이에는 적어도 하나의 공백을 넣도록하십시오. 첫 번째 열쇠는DES_ENCRYPT()
에 키 인수를 지정하지 않은 경우에 사용되는 기본 키입니다.FLUSH DES_KEY_FILE
문에 키 파일에서 새로운 키 값을 읽을 수 있도록 MySQL에 지시 할 수 있습니다. 여기에는RELOAD
권한이 필요합니다.기본 키 세트를 가지는 장점은 이러한 값을 해독 할 권리를 최종 사용자에게 부여하지 않고 암호화 된 컬럼 값의 유무를 확인하는 방법이 응용 프로그램에 제공되는 것입니다.
mysql>
SELECT customer_address FROM customer_table
>WHERE crypted_credit_card = DES_ENCRYPT('credit_card_number');
ENCODE (
str
,pass_str
)암호로
pass_str
을 사용하여str
를 암호화합니다. 결과는str
과 같은 길이의 이진 문자열입니다. 결과를 해독하려면DECODE()
를 사용합니다.ENCODE()
함수를 사용해서는 없게되어 있습니다. 아직ENCODE()
를 사용할 필요가있는 경우에는 위험을 줄이기 위해 함께 salt 값을 사용해야합니다. 예 :ENCODE ( 'plaintext', CONCAT ( 'my_random_salt', 'my_secret_password'))
암호를 업데이트 할 때마다 새로운 임의의 salt 값을 사용해야합니다.
ENCRYPT (
str
[,salt
])UNIX
crypt()
시스템 호출을 사용하여str
를 암호화하고 이진 문자열을 반환합니다.salt
인수는 두 개 이상의 문자를 포함하는 문자열을해야합니다. 그렇지 않으면, 결과는NULL
이됩니다.salt
인수가 지정되지 않은 경우 임의의 값이 사용됩니다.mysql>
SELECT ENCRYPT('hello');
-> 'VxuFAJXVARROc'적어도 일부 시스템에서는
ENCRYPT()
은str
의 처음 8 문자 이외의 모든 것을 무시합니다. 이 동작은 기반이되는crypt()
시스템 호출의 구현에 따라 다릅니다.시스템 호출은 0 바이트로 끝나는 문자열이 요구되기 때문에
ucs2
,utf16
,utf16le
또는utf32
멀티 바이트 문자 집합을 포함ENCRYPT()
의 사용은 권장되지 않습니다.시스템에서
crypt()
를 사용할 수없는 경우 (Windows의 경우)ENCRYPT()
는 항상NULL
을 반환합니다.MD5 (
str
)문자열의 MD5 128 비트 체크섬을 계산합니다. 이 값은 32 자리의 16 진수 문자열로 반환됩니다. 인수가
NULL
인 경우에는NULL
입니다. 예를 들어, 반환 값을 해시 키로 사용할 수 있습니다. 효율적인 해시 값의 저장 내용은이 섹션의 시작 부분에 나와있는 참고를 참조하십시오.반환 값은 연결 문자 셋의 비 이진 문자열입니다.
mysql>
SELECT MD5('testing');
-> 'ae2b1fca515949e5d54fb22b8ed95575'이것은 "RSA Data Security, Inc. MD5 Message-Digest Algorithm"입니다.
이 섹션의 시작 부분에 나열된 MD5 알고리즘에 대한 참고를 참조하십시오.
OLD_PASSWORD (
str
)OLD_PASSWORD()
는 보안을 개선하기 위해 MySQL 4.1에서PASSWORD()
의 구현이 변경되었을 때 추가되었습니다.OLD_PASSWORD()
는PASSWORD()
의 4.1 이전의 구현의 값을 문자열로 반환합니다. 이것은 버전 5.6의 MySQL 서버에 연결해야하는 4.1 이전의 클라이언트를 차단하지 않고, 그 클라이언트의 암호를 재설정하도록 허용하는 것입니다. 섹션 6.1.2.4 "MySQL에서 암호 해시" 를 참조하십시오.반환 값은 연결 문자 셋의 비 이진 문자열입니다.
참고4.1 이전의 해시 방식을 사용하는 암호는 기본 암호 해시 방식을 사용하는 암호보다 안전하지 않기 때문에 사용하지 않도록하십시오. 4.1 이전 암호는 사용되지 않으며, 이러한 지원은 향후 MySQL 릴리스에서 제거 될 예정입니다. 마지막으로,
OLD_PASSWORD()
도 사용되지 않습니다.PASSWORD (
str
)일반 텍스트 암호
str
에서 계산 한 해시 된 암호 문자열을 반환합니다. 반환 값은 연결 문자 셋의 비 이진 문자열입니다. 인수가NULL
의 경우는NULL
입니다. 이 함수는mysql.user
부여 테이블에 저장하는 MySQL 패스워드를 암호화 할 때 서버에서 사용되는 알고리즘에 대한 SQL 인터페이스입니다.old_passwords
시스템 변수는PASSWORD()
함수에서 사용되는 암호 해시 방법을 제어합니다. 이것은IDENTIFIED BY
절을 사용하여 암호를 지정하는CREATE USER
및GRANT
문이 실행되는 암호 해시에 영향을줍니다.다음 표는
old_passwords
의 허용되는 값 각각의 값에 대한 암호 해시 방식 및 각각의 방식으로 해시 된 암호를 사용하는 인증 플러그인을 나타냅니다. 이 값은 MySQL 5.6.6 이후에 허용됩니다. 5.6.6 이전에서는 허용되는 값은 0 (또는OFF
)와 1 (또는ON
)입니다.값 암호 해시 방식 연관된 인증 플러그인 0 MySQL 4.1 기본 해시 mysql_native_password
1 4.1 이전 ( "이전") 해시 mysql_old_password
2 SHA-256 해시 sha256_password
old_passwords=1
의 경우,PASSWORD(
는str
)OLD_PASSWORD(
와 같은 값을 반환합니다. 후자의 함수는str
)old_passwords
값에 의해 영향을받지 않습니다.mysql>
SET old_passwords = 0;
mysql>SELECT PASSWORD('mypass'), OLD_PASSWORD('mypass');
+-------------------------------------------+------------------------+ | PASSWORD('mypass') | OLD_PASSWORD('mypass') | +-------------------------------------------+------------------------+ | *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 | 6f8c114b58f2ce9e | +-------------------------------------------+------------------------+ mysql>SET old_passwords = 1;
mysql>SELECT PASSWORD('mypass'), OLD_PASSWORD('mypass');
+--------------------+------------------------+ | PASSWORD('mypass') | OLD_PASSWORD('mypass') | +--------------------+------------------------+ | 6f8c114b58f2ce9e | 6f8c114b58f2ce9e | +--------------------+------------------------+SHA-256 암호 해시 (
old_passwords=2
)는PASSWORD()
의 결과를 비 결정적으로 임의의 salt 값이 사용됩니다. 그 결과,이 함수가 사용되는 문은 문 기반 복제 안전하지 쿼리 캐시에 저장할 수 없습니다.PASSWORD()
에서 실행되는 암호화는 단방향 (되돌릴 수 없습니다). 암호화 유형은 Unix 암호에 사용되는 것과 동일하지 않습니다. 그 유형을 사용하려면ENCRYPT()
를 사용합니다.참고PASSWORD()
함수는 MySQL 서버의 인증 시스템에 사용됩니다. 자신의 응용 프로그램에서는 사용하지 않도록하십시오. 그래서 대신MD5()
또는SHA2()
를 사용하십시오. 응용 프로그램의 보안 암호 처리 및 인증 보안에 대한 자세한 내용은 RFC 2195의 섹션 2 ( "Challenge-Response Authentication Mechanism (CRAM) ') 도 참조하십시오.참고4.1 이전의 해시 방식을 사용하는 암호는 기본 암호 해시 방식을 사용하는 암호보다 안전하지 않기 때문에 사용하지 않도록하십시오. 4.1 이전 암호는 사용되지 않으며, 이러한 지원은 향후 MySQL 릴리스에서 제거 될 예정입니다. 그 결과,
PASSWORD()
에서 4.1 이전 암호 해시를 생성하는old_passwords=1
도 비추천입니다. 계정 업그레이드 지침은 섹션 6.3.8.3 "4.1 이전 암호 해시 방식과 mysql_old_password 플러그인에서 마이그레이션" 을 참조하십시오.주의상황에 따라서는 서버 로그 또는 클라이언트 쪽
~/.mysql_history
등의 기록 파일에PASSWORD()
를 호출 문이 기록 될 수 있습니다. 이것은 그 정보에 대한 읽기 권한을 가지고있는 사용자라면 누구든지 일반 텍스트 암호를 읽을 수 있다는 것을 의미합니다. 이것이 서버 로그에서 발생하는 조건 및이를 제어하는 방법은 섹션 6.1.2.3 "암호 및 로깅" 을 참조하십시오. 클라이언트 측 로깅에 대한 유사한 정보는 섹션 4.5.1.3 "mysql 로그" 를 참조하십시오.RANDOM_BYTES (
len
)이 함수는 SSL 라이브러리 (OpenSSL 또는 yaSSL)의 난수 생성기를 사용하여 생성 된 임의의
len
바이트의 이진 문자열을 반환합니다.len
에서 허용되는 값은 1에서 1024까지의 범위입니다. 값이이 범위를 벗어나면RANDOM_BYTES()
는 경고를 생성하고NULL
을 반환합니다.RANDOM_BYTES()
를 사용하면AES_DECRYPT()
및AES_ENCRYPT()
함수에 초기화 벡터를 제공 할 수 있습니다. 이러한 맥락에서 사용하려면len
을 16 이상으로 할 필요가 있습니다. 더 큰 값도 허용되지만 16을 넘는 바이트는 무시됩니다.RANDOM_BYTES()
는 그 결과를 비 결정적으로 임의의 값을 생성합니다. 그 결과,이 함수가 사용되는 문은 문 기반 복제에 대해 안전하지 쿼리 캐시에 저장할 수 없습니다.이 함수는 MySQL 5.6.17 시점에서 사용 가능합니다.
SHA1(
,str
)SHA(
str
)RFC 3174 (Secure Hash Algorithm)에 설명 된대로 문자열의 SHA-1 160 비트 체크섬을 계산합니다. 이 값은 40 자리의 16 진수 문자열로 반환됩니다. 인수가
NULL
인 경우에는NULL
입니다. 이 함수를 사용하는 예를 들어, 해시 키가있을 수 있습니다. 효율적인 해시 값의 저장 내용은이 섹션의 시작 부분에 나와있는 참고를 참조하십시오.SHA1()
는 암호를 저장하는 암호화 함수로도 사용할 수 있습니다.SHA()
는SHA1()
의 동의어입니다.반환 값은 연결 문자 셋의 비 이진 문자열입니다.
mysql>
SELECT SHA1('abc');
-> 'a9993e364706816aba3e25717850c26c9cd0d89d'SHA1()
는MD5()
와 동일하지만 암호화에 관해서는보다 안전하다고 생각됩니다. 그러나이 섹션의 시작 부분에 나열된 MD5 및 SHA-1 알고리즘에 대한 참고를 참조하십시오.SHA2 (
str
,hash_length
)SHA-2 제품군에 대한 해시 함수 (SHA-224, SHA-256, SHA-384 및 SHA-512)를 계산합니다. 1 번째의 인수는 해시되는 일반 텍스트 문자열입니다. 두 번째 인수는 결과의 원하는 비트 길이가 지정됩니다. 값은 224,256,384,512 또는 0 (256과 동일합니다) 할 필요가 있습니다. 인수 중 하나가
NULL
이거나 해시의 길이가 허용되는 값 중 하나가 아닌 경우에는 반환 값이NULL
입니다. 그렇지 않으면 함수의 결과가 원하는 비트 수가 포함 된 해시 값입니다. 효율적인 해시 값의 저장 내용은이 섹션의 시작 부분에 나와있는 참고를 참조하십시오.반환 값은 연결 문자 셋의 비 이진 문자열입니다.
mysql>
SELECT SHA2('abc', 224);
-> '23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7'이 함수는 MySQL이 SSL 지원으로 구성되어있는 경우에만 작동합니다. 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오.
SHA2()
는MD5()
또는SHA1()
보다 암호화에 관해서는보다 안전하다고 생각됩니다.UNCOMPRESS (
string_to_uncompress
)COMPRESS()
함수에서 압축 된 문자열을 압축 해제합니다. 인수가 압축 된 값이 아닌 경우는 결과가NULL
입니다. 이 함수를 사용하려면 MySQL이zlib
등의 압축 라이브러리를 사용하여 컴파일되어 있어야합니다. 그렇지 않으면 반환 값은 항상NULL
입니다.mysql>
SELECT UNCOMPRESS(COMPRESS('any string'));
-> 'any string' mysql>SELECT UNCOMPRESS('any string');
-> NULLUNCOMPRESSED_LENGTH (
compressed_string
)압축 된 문자열이 압축되기 전의 길이를 반환합니다.
mysql>
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));
-> 30VALIDATE_PASSWORD_STRENGTH (
str
)일반 텍스트 암호를 나타내는 인수가 지정된 경우,이 함수는 암호의 강도를 나타내는 정수를 반환합니다. 반환 값은 0 (약점)에서 100 (강도)까지의 범위 내입니다.
암호는 한층 엄격해진 테스트의 대상이며, 반환 값은 다음 표와 같이 어떤 테스트를 통과했는지를 나타냅니다.
비밀번호 테스트 반환 값 길이 <4 0 길이 ≥ 4 및 < validate_password_length
25 정책 1을 충족 ( LOW
)50 정책 2를 충족 ( MEDIUM
)75 정책 3을 충족 ( STRONG
)100 VALIDATE_PASSWORD_STRENGTH()
가 암호를 평가validate_password
플러그인으로 실행됩니다. 이 플러그인이 설치되어 있지 않은 경우, 함수는 항상 0을 반환합니다.validate_password
플러그인의 설치 내용은 섹션 6.1.2.6 "비밀번호 확인 플러그인" 을 참조하십시오. 암호 테스트에 영향을 미치는 매개 변수를 확인하거나 구성하려면validate_password
플러그인으로 구현되는 시스템 변수를 확인하거나 설정합니다. 섹션 6.1.2.6.2 "비밀번호 확인 플러그인의 옵션 및 변수" 를 참조하십시오.이 함수는 MySQL 5.6.6에서 추가되었습니다.