9.암호화 변환 함수

Edit

9.1decode()decode()

바이너리 값을 지정된 인코딩으로 해석하여 문자열을 반환합니다.

문법

decode(BLOB_EXPR[, CHARSET])
BLOB_EXPR

바이너리로 평가되는 표현식을 입력합니다. 바이너리가 아닌 값을 받으면 null을 반환합니다.

CHARSET

파일의 인코딩을 지정합니다(기본값: UTF-8). 인코딩 형식 이름은 IANA Charset Registry에 등록된 Preferred MIME Name 또는 Aliases에 등록된 이름을 사용합니다: https://www.iana.org/assignments/character-sets/character-sets.xhtml

사용 예

json "{}" 
| eval encoded=encode("hello, world!"),
     decoded=decode(encoded)
  => encoded: 68656c6c6f2c20776f726c6421 # 바이너리
  => decoded: "hello, world!" # 문자열

9.2decrypt()decrypt()

Java가 제공하는 Cipher 클래스를 이용해 암호화된 바이너리 값을 복호화하여 반환합니다.

문법

decrypt(TRANSFORMATION, KEY, DATA[, IV])
TRANSFORMATION

알고리즘/모드/패딩 형식으로 구성된 문자열을 반환하는 표현식을 지정합니다. 모드와 패딩을 생략하고 알고리즘만 입력하면 기본 암호 알고리즘을 적용합니다.

로그프레소는 호환성을 위해 Java가 제공하는 다양한 암호 알고리즘을 지원합니다. 그러나 DES 계열이나 ECB 모드와 같이 안전하지 않은 암호 알고리즘이나 모드는 사용하지 않는 것이 좋습니다. Java에서 사용하는 암호화 클래스(Cipher Class)는 다음 주소에 있는 문서를 참조하세요:
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/crypto/Cipher.html
사용할 수 있는 알고리즘, 모드, 패딩은 Java Security Standard Algorithm Names 문서를 참조하세요: https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html.
* 알고리즘은 Cipher Algorithm Names 섹션에서 확인할 수 있습니다.
* 모드는 Cipher Algorithm Modes 섹션에서 확인할 수 있습니다.
* 패딩은 Cipher Algorithm Paddings 섹션에서 확인할 수 있습니다.
다음은 모든 Java 구현체가 반드시 지원해야 하는 형식입니다. DES, DESede 알고리즘, ECB 모드는 안전하지 않으므로 외부 시스템과 호환성 문제 등이 있을 때에만 사용하기 바랍니다. 괄호 안은 암호화 비트를 나타냅니다.
- AES/CBC/NoPadding (128)
- AES/CBC/PKCS5Padding (128)
- AES/ECB/NoPadding (128)
- AES/ECB/PKCS5Padding (128)
- AES/GCM/NoPadding (128)
- DES/CBC/NoPadding (56)
- DES/CBC/PKCS5Padding (56)
- DES/ECB/NoPadding (56)
- DES/ECB/PKCS5Padding (56)
- DESede/CBC/NoPadding (168)
- DESede/CBC/PKCS5Padding (168)
- DESede/ECB/NoPadding (168)
- DESede/ECB/PKCS5Padding (168)
- RSA/ECB/PKCS1Padding (1024, 2048)
- RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
- RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)
KEY

지정한 암호 알고리즘에 일치하는 크기의 바이너리 키를 입력합니다. 알고리즘에 따른 키 길이는 다음과 같습니다.

암호화 키 길이는 암호 알고리즘이 요구하는 키의 길이를 8로 나눠 바이트로 환산한 값입니다.
DATA

복호화할 바이너리 데이터를 입력합니다.

IV

CBC와 같이 초기화 벡터(IV, Initial Vector)가 필요한 운영 모드를 사용할 때 바이너리 값을 입력합니다.

사용 예

json "{}" 
| eval decrypted=
  decode(
    decrypt("AES",frombase64("mRcOlK9V47rjVL/RBYQYRw=="),
    frombase64("y7+NQQ9/9xGtbBq5pgBvCA==")
  )
)
  => "hello, world!" # encrypt() 사용 예와 비교

9.3encode()encode()

문자열을 지정된 인코딩을 이용하여 바이너리 개체로 반환합니다.

문법

encode(STR, [CHARSET])
STR

문자열로 평가되는 표현식을 입력합니다. 바이너리가 아닌 값을 받으면 null을 반환합니다.

CHARSET

문자열 인코딩 형식(기본값: UTF-8). 다음 문서에 등록된 Preferred MIME Name이나 Aliases를 사용합니다: https://www.iana.org/assignments/character-sets/character-sets.xhtml

사용 예

json "{}" 
| eval encoded=encode("hello, world!"), decoded=decode(encoded)
=> encoded: 68656c6c6f2c20776f726c6421 # 바이너리
=> decoded: "hello, world!" # 문자열

9.4encrypt()encrypt()

바이너리 값을 지정된 알고리즘과 키로 암호화하여 반환합니다.

문법

encrypt(TRANSFORMATION, KEY, DATA[, IV])
TRANSFORMATION

알고리즘/모드/패딩 형식으로 구성된 문자열을 반환하는 표현식을 지정합니다. 모드와 패딩을 생략하고 알고리즘만 입력하면 기본 암호 알고리즘을 적용합니다.

로그프레소는 호환성을 위해 Java가 제공하는 다양한 암호 알고리즘을 지원합니다. 그러나 DES 계열이나 ECB 모드와 같이 안전하지 않은 암호 알고리즘이나 모드는 사용하지 않는 것이 좋습니다. Java에서 사용하는 암호화 클래스(Cipher Class)는 다음 주소에 있는 문서를 참조하세요:
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/crypto/Cipher.html
사용할 수 있는 알고리즘, 모드, 패딩은 Java Security Standard Algorithm Names 문서를 참조하세요: https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html.
* 알고리즘은 Cipher Algorithm Names 섹션에서 확인할 수 있습니다.
* 모드는 Cipher Algorithm Modes 섹션에서 확인할 수 있습니다.
* 패딩은 Cipher Algorithm Paddings 섹션에서 확인할 수 있습니다.
다음은 모든 Java 구현체가 반드시 지원해야 하는 형식입니다. DES, DESede 알고리즘, ECB 모드는 안전하지 않으므로 외부 시스템과 호환성 문제 등이 있을 때에만 사용하기 바랍니다. 괄호 안은 암호화 비트를 나타냅니다.
- AES/CBC/NoPadding (128)
- AES/CBC/PKCS5Padding (128)
- AES/ECB/NoPadding (128)
- AES/ECB/PKCS5Padding (128)
- AES/GCM/NoPadding (128)
- DES/CBC/NoPadding (56)
- DES/CBC/PKCS5Padding (56)
- DES/ECB/NoPadding (56)
- DES/ECB/PKCS5Padding (56)
- DESede/CBC/NoPadding (168)
- DESede/CBC/PKCS5Padding (168)
- DESede/ECB/NoPadding (168)
- DESede/ECB/PKCS5Padding (168)
- RSA/ECB/PKCS1Padding (1024, 2048)
- RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
- RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)
KEY

지정한 암호 알고리즘에 일치하는 크기의 바이너리 키를 입력합니다. 알고리즘에 따른 키 길이는 다음과 같습니다.

암호화 키 길이는 암호 알고리즘이 요구하는 키의 길이를 8로 나눠 바이트로 환산한 값입니다.
DATA

암호화할 바이너리 데이터를 입력합니다.

IV

CBC와 같이 초기화 벡터(IV, Initial Vector)가 필요한 운영 모드를 사용할 때 바이너리 값을 입력합니다.

사용 예

json "{}" 
| eval encrypted=tobase64(
  encrypt("AES",
          frombase64("mRcOlK9V47rjVL/RBYQYRw=="),
          binary("hello, world!")
  )
)
  => "y7+NQQ9/9xGtbBq5pgBvCA==" # decrypt() 사용 예를 참조

9.5hash()hash()

단방향 해시 알고리즘을 수행한 결과를 바이너리 값으로 반환합니다.

문법

hash(HASH_ALGO, BIN_DATA)
HASH_ALGO

해시 알고리즘을 md5, sha1, sha256, sha384, sha512 중에서 선택해서 입력합니다.

BIN_DATA

해시를 적용할 데이터를 지정합니다. 데이터는 바이너리 형태이어야 합니다. 바이너리가 아닌 값을 받으면 null을 반환합니다.

사용 예

json "{}" 
| eval hash=hash("md5", binary("hello, world!"))
  => 3adbbad1791fbae3ec908894c4963870

json "{}" 
| eval hash=hash("sha1", binary("hello, world!"))
  => 1f09d30c707d53f3d16c530dd73d70a6ce7596a9

json "{}" 
| eval hash=hash("sha256", binary("hello, world!"))
  => 68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728

json "{}" 
| eval hash=hash("sha384", binary("hello, world!"))
  => fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd

json "{}" 
| eval hash=hash("sha512", binary("hello, world!"))
  =>
6c2618358da07c830b88c5af8c3535080e8e603c88b891028a259ccdb9ac802d0fc0170c99d58affcf00786ce188fc5d753e8c6628af2071c3270d50445c4b1c

json "{}" | eval hash=hash("md5", "hello world") => null
json "{}" | eval hash=hash("sha1", null) => null
json "{}" | eval hash=hash("sha1", 1234) => null

9.6rand()rand()

0보다 크고 지정한 경계값보다 작은 임의의 정수를 반환합니다.

문법

rand(NUM[, SEED])
NUM

0보다 큰 정수를 입력합니다. 0보다 크고 NUM보다 작은 임의의 숫자를 반환합니다.

SEED

이 값을 입력하면 무작위 정수 값을 반환하지 않고 항상 고정된 값을 반환합니다. 이 함수를 이용하는 쿼리문을 디버깅하거나 쿼리문의 동작을 검증하기 위한 시험 등의 목적으로 사용합니다.

SEED 매개변수는 쿼리문 기능 검증이나 시험과 같은 목적으로 쿼리문을 실행할 때 항상 값은 값을 반환하게 할 목적으로 쓰입니다. 실제 운영 환경에서는 사용에 주의하십시오.

사용 예

json "{}" | eval rand=rand(1000) => 0~999의 임의의 값

9.7randbytes()randbytes()

지정된 길이만큼 임의의 값으로 채워진 바이너리를 반환합니다.

문법

randbytes(NUM)
NUM

바이너리 길이 상수를 입력합니다. 1에서 10,240까지의 길이만 허용됩니다.

사용 예

json "{}" | eval rand_blob=randbytes(32)
  => 바이너리 값 예시 6765eab83af980a266461427739cc37a8b4ee60dab09b091282c1070a3191e2d
Count of comments [0]