FirebirdSQL logo

RSA_ENCRYPT()

Доступно в

DSQL, PSQL

Синтаксис
RSA_ENCRYPT (<data> KEY <public_key> [LPARAM <tag>] [HASH <hash>])

<hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Table 1. Параметры функции RSA_ENCRYPT
Параметр Описание

data

Данные (строка или BLOB) для шифрования.

public_key

Открытый RSA ключ, который возвращает функция RSA_PUBLIC.

tag

Дополнительный системный тег, который можно применять для определения того, какая система закодировала сообщение.Значением по умолчанию является NULL.

hash

Алгоритм хеширования.По умолчанию SHA256.

Тип возвращаемого результата:

VARBINARY

Заполняет данные, используя заполнение OAEP, и шифрует их, используя открытый ключ RSA.Обычно используется для шифрования коротких симметричных ключей, которые затем используются в блочных шифрах для шифрования сообщения.

Example 1. Использование функции RSA_ENCRYPT

Открытый ключ должен быть инициализирован ранее см.пример в [fblangref-scalarfuncs-rsa_public]

select rdb$set_context('USER_SESSION', 'msg',
    rsa_encrypt('Some message' key rdb$get_context('USER_SESSION', 'public_key')))
from rdb$database;

RSA_DECRYPT()

Доступно в

DSQL, PSQL

Синтаксис
RSA_DECRYPT (<data> KEY <private_key> [LPARAM <tag>] [HASH <hash>])

<hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Table 1. Параметры функции RSA_DECRYPT
Параметр Описание

data

Данные (строка или BLOB) для дешифрования.

private_key

Закрытый RSA ключ, который возвращает функция RSA_PRIVATE.

tag

Дополнительный системный тег.Должно быть тем же самым значением, которое передавалось RSA_ENCRYPT.Если оно не совпадает с тем, который использовался во время кодирования, эта функция не расшифровывает пакет.Значением по умолчанию является NULL.

hash

Алгоритм хеширования.По умолчанию SHA256.

Тип возвращаемого результата:

VARCHAR

Расшифровывает с использованием закрытого ключа RSA, и удаляет OAEP дополненные данные.

Example 1. Использование функции RSA_DECRYPT

Закрытый ключ должен быть инициализирован ранее см. пример в [fblangref-scalarfuncs-rsa_private].Данные для расшифровки используются из примера в [fblangref-scalarfuncs-rsa_encrypt].

select RSA_DECRYPT(rdb$get_context('USER_SESSION', 'msg')
    key rdb$get_context('USER_SESSION', 'private_key'))
from RDB$DATABASE;

docnext count = 11

RSA_SIGN_HASH()

Доступно в

DSQL, PSQL

Синтаксис
RSA_SIGN_HASH (<data> KEY <private_key> [HASH <hash>] [SALT_LENGTH <length>])

<hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Table 1. Параметры функции RSA_SIGN_HASH
Параметр Описание

data

Данные (строка или BLOB) для кодирования.

private_key

Закрытый RSA ключ, который возвращает функция RSA_PRIVATE.

hash

Алгоритм хеширования.По умолчанию SHA256.

length

Указывает на длину желаемой соли и, как правило, должен быть небольшим.Хорошее значение от 8 до 16.

Тип возвращаемого результата:

VARBINARY

Выполняет PSS-кодирование дайджеста сообщения для подписи и подписывает его с использованием закрытого ключа RSA.Возвращает подпись сообщения.

Example 1. Использование функции RSA_SIGN_HASH

Закрытый ключ должен быть инициализирован ранее см.пример в [fblangref-scalarfuncs-rsa_private].

select rdb$set_context('USER_SESSION', 'msg',
    rsa_sign_hash(crypt_hash('Test message' using sha256)
                  key rdb$get_context('USER_SESSION', 'private_key')))
from rdb$database;

RSA_VERIFY_HASH()

Доступно в

DSQL, PSQL

Синтаксис
RSA_VERIFY_HASH (<data> SIGNATURE <signature> KEY <public_key> [HASH <hash>]
  [SALT_LENGTH <length>])

<hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Table 1. Параметры функции RSA_VERIFY_HASH
Параметр Описание

data

Данные (строка или BLOB) для кодирования.

signature

Подпись.Должно быть значением возвращаемым функцией RSA_SIGN_HASH.

public_key

Открытый RSA ключ, который возвращает функция RSA_PUBLIC.

hash

Алгоритм хеширования.По умолчанию SHA256.

length

Указывает на длину желаемой соли и, как правило, должен быть небольшим.Хорошее значение от 8 до 16.

Тип возвращаемого результата

BOOLEAN

Выполняет PSS-кодирование дайджеста сообщения для подписи и проверяет его цифровую подпись, используя открытый ключ RSA.Возвращает результат проверки подписи.

Example 1. Использование функции RSA_VERIFY_HASH

Открытый ключ должен быть инициализирован ранее см. пример в [fblangref-scalarfuncs-rsa_public].Цифровая подпись получена ранее с помощью функции [fblangref-scalarfuncs-rsa_sign_hash].

select rsa_verify_hash(crypt_hash('Test message' using sha256)
    signature rdb$get_context('USER_SESSION', 'msg')
    key rdb$get_context('USER_SESSION', 'public_key'))
from rdb$database;

Функции преобразования типов

CAST()

Доступно в

DSQL, PSQL

Синтаксис
CAST(value | NULL AS <type>)

<type> ::=
    <datatype>
  | [TYPE OF] domain
  | TYPE OF COLUMN relname.colname

<datatype> ::=
    <scalar_datatype> | <blob_datatype> | <array_datatype>

<scalar_datatype> ::=  См. Синтаксис скалярных типов данных

<blob_datatype> ::= См. Синтаксис типа данных BLOB

<array_datatype> ::= См. Синтаксис массивов
Table 1. Параметры функции CAST
Параметр Описание

value

SQL выражение.

datatype

Тип данных SQL.

domain

Домен.

relname

Имя таблицы или представления.

colname

Имя столбца таблицы или представления.

Тип возвращаемого результата

<type>.

Функция CAST служит для явного преобразования данных из одного типа данных в другой тип данных или домен.Если это невозможно будет выдана ошибка.

Table 2. Допустимые преобразования для функции CAST
Из типа В тип

Числовые типы

Числовые типы, [VAR]CHAR, BLOB

[VAR]CHAR, BLOB

[VAR]CHAR, BLOB, BOOLEAN, Числовые типы, DATE, TIME, TIMESTAMP

DATE, TIME

[VAR]CHAR, BLOB, TIMESTAMP

TIMESTAMP

[VAR]CHAR, BLOB, TIME, DATE

BOOLEAN

[VAR]CHAR, BLOB

Имейте в виду, что иногда информация может быть потерянна, например, когда вы преобразуете тип TIMESTAMP к DATE.Кроме того, тот факт, что типы совместимы для функции CAST, ещё не гарантирует, что преобразование будет успешным.“CAST (123456789 AS SMALLINT)” безусловно приведёт к ошибке, так же как и “CAST('Judgement Day' as DATE)”.

Вы можете применить преобразование типа к параметрам оператора:

CAST (? AS INTEGER)

Это дает вам контроль над типом полей ввода.

Преобразование к домену или к его базовому типу

При преобразовании к домену должны быть удовлетворены любые ограничения (NOT NULL и/или CHECK) объявленные для домена, иначе преобразование не будет выполнено.Помните, что проверка CHECK проходит, если его вычисление даёт TRUE или UNKNOWN (NULL). Для следующих операторов:

CREATE DOMAIN quint AS INT CHECK (VALUE >= 5000)
SELECT CAST (2000 AS quint) FROM rdb$database -- (1)
SELECT CAST (8000 AS quint) FROM rdb$database -- (2)
SELECT CAST (null AS quint) FROM rdb$database -- (3)

только (1) завершится с ошибкой.

При использовании модификатора TYPE OF выражение будет преобразовано к базовому типу домена, игнорируя любые ограничения.Для домена quint, объявленного выше, оба преобразования будут эквивалентны и оба будут успешно выполнены:

SELECT CAST (2000 AS TYPE OF quint) FROM rdb$database
SELECT CAST (2000 AS INT) FROM rdb$database

При использовании TYPE OF с [VAR]CHAR типом, его набор символов и порядок сортировки (collate) сохраняются.

CREATE DOMAIN iso20 VARCHAR(20) CHARACTER SET iso8859_1;
CREATE DOMAIN dunl20 VARCHAR(20) CHARACTER SET iso8859_1 COLLATE du_nl;
CREATE TABLE zinnen (zin VARCHAR(20));
COMMIT;
INSERT INTO zinnen VALUES ('Deze');
INSERT INTO zinnen VALUES ('Die');
INSERT INTO zinnen VALUES ('die');
INSERT INTO zinnen VALUES ('deze');
SELECT CAST(zin AS TYPE OF iso20) FROM zinnen ORDER BY 1;
-- returns Deze -> Die -> deze -> die
SELECT CAST(zin AS TYPE OF dunl20) FROM zinnen ORDER BY 1;
-- returns deze -> Deze -> die -> Die
Warning

Если определение домена изменяется, то существующие преобразования к домену или его типу могут стать ошибочными.Если такие преобразования происходят в PSQL модулях, то их ошибки могут быть обнаружены.См. Поле RDB$VALID_BLR.

Преобразование к типу столбца

Разрешено преобразовывать выражение к типу столбца существующей таблицы или представления.При этом будет использован только сам тип, для строковых типов будет использован так же набор символов, но не последовательность сортировки.Ограничения и значения по умолчанию исходного столбца не применяются.

CREATE TABLE ttt (
  s VARCHAR(40) CHARACTER SET utf8 COLLATE unicode_ci_ai
);
COMMIT;
SELECT CAST ('Jag har många vänner' AS TYPE OF COLUMN ttt.s)
FROM rdb$database;
Warning

Если определение столбца изменяется, то существующие преобразования к его типу могут стать ошибочными.Если такие преобразования происходят в PSQL модулях, то их ошибки могут быть обнаружены.См. Поле RDB$VALID_BLR.

Примеры приведения типов

SELECT CAST ('12' || '-June-' || '1959' AS DATE) FROM rdb$database

Заметьте, что в некоторых случаях вы можете не использовать синтаксис преобразования как в примере выше, так как Firebird поймёт из контекста (сравнение с полем типа DATE) как интерпретировать строку:

UPDATE People SET AgeCat = 'Old'
WHERE BirthDate < '1-Jan-1943'

Но это не всегда возможно.Преобразование в примере ниже не может быть опущено, так как система будет пытаться преобразовать строку к числу чтобы вычесть из неё число:

SELECT CAST('TODAY' AS DATE) - 7 FROM rdb$database

Функции побитовых операций

BIN_AND()

Доступно в

DSQL, PSQL

Синтаксис
BIN_AND (number, number [, number ...])
Table 1. Параметры функции BIN_AND
Параметр Описание

number

Целое число.

Тип возвращаемого результата

SMALLINT, INTEGER, BIGINT или INT128

Функция BIN_AND возвращает результат побитовой операции AND (И) аргументов.

BIN_NOT()

Доступно в

DSQL, PSQL

Синтаксис
BIN_NOT (number)
Table 1. Параметры функции BIN_NOT
Параметр Описание

number

Целое число.

Тип возвращаемого результата

SMALLINT, INTEGER, BIGINT или INT128

Функция BIN_NOT возвращает результат побитовой операции NOT над аргументом.

BIN_OR()

Доступно в

DSQL, PSQL

Синтаксис
BIN_OR (number, number [, number ...])
Table 1. Параметры функции BIN_OR
Параметр Описание

number

Целое число.

Тип возвращаемого результата

SMALLINT, INTEGER, BIGINT или INT128

Функция BIN_OR возвращает результат побитовой операции OR (ИЛИ) аргументов.

BIN_SHL()

Доступно в

DSQL, PSQL

Синтаксис
BIN_SHL (number, shift)
Table 1. Параметры функции BIN_SHL
Параметр Описание

number

Целое число.

shift

Количество бит, на которое смещается значение number.

Тип возвращаемого результата

BIGINT или INT128.

Функция BIN_SHL возвращает первый параметр, побитно смещённый влево на значение второго параметра, т.е. a << b или a·2b.

См. также:

[fblangref-scalarfuncs-bin-shr].

BIN_SHR()

Доступно в

DSQL, PSQL

Синтаксис
BIN_SHR (number, shift)
Table 1. Параметры функции BIN_SHR
Параметр Описание

number

Целое число.

shift

Количество бит на которое смещается значение number.

Тип возвращаемого результата:

BIGINT или INT128.

Функция BIN_SHR возвращает первый параметр, побитно смещённый вправо на значение второго параметра, т.е. a >> b или a/2b.

  • Выполняемая операция является арифметическим сдвигом вправо (SAR), а это означает, что знак первого операнда всегда сохраняется.

См. также:

[fblangref-scalarfuncs-bin-shl].

BIN_XOR()

Доступно в

DSQL, PSQL

Синтаксис
BIN_XOR (number, number [, number ...])
Table 1. Параметры функции BIN_XOR
Параметр Описание

number

Целое число.

Тип возвращаемого результата

SMALLINT, INTEGER, BIGINT или INT128

Функция BIN_XOR возвращает результат побитовой операции XOR аргументов.