DECRYPTSTR


Библиотека

V32.EXE

Синтаксис

DECRYPTSTR(Text: STRING[];
           Secret: SECRETTYPE;
           EncryptionAlgID: NUMERIC[0];
           [ EncryptionKeyLen: NUMERIC[0]; ]
           [ HashingAlgID: NUMERIC[0]; ]
           [ CSPName: STRING[]; ]
           [ CSPType: NUMERIC[0] ]
          ): STRING[];
SECRETTYPE = STRING[] | NUMERIC[0]

Описание

Функция расшифровывает строку Text; способ дешифрования зависит от параметра Secret. Если в параметр Secret передана строка, считается, что это пароль. Если передано число, предполагается альтернативный секрет из набора констант CSECR. Значение CSECR_PKCU задает дешифрование приватным ключом из ключевой пары пользователя; приватный ключ хранится в защищенном виде в системном реестре в профиле пользователя. Значение CSECR_INTERNAL1 задает дешифрование внутренним ключом, который хранится в скрытом виде в бинарном коде приложений ASB. Внутренний ключ предназначен только для передачи секретных данных в другие приложения ASB, например wMailTo, поэтому дешифрование внутренним ключом запрещено; функция выбросит исключение.

Расшифрование паролем функция выполняет следующим образом.

  1. При помощи алгоритма Base64 преобразует строку Text в бинарные данные.
  2. Получает дайджест пароля при помощи алгоритма хеширования HashingAlgID. Алгоритм хеширования задается константой из набора констант CALG. По умолчанию используется алгоритм хеширования MD5 (константа CALG_MD5).
  3. На основе дайджеста пароля формирует производный ключ для алгоритма симметричного шифрования EncryptionAlgID с учетом заданной длины ключа EncryptionKeyLen. Алгоритм шифрования задается константой из набора констант CALG. Параметр EncryptionKeyLen по умолчанию равен нулю, т.е. используется определенная криптопровайдером длина ключа по умолчанию.
  4. Расшифровывает бинарные данные при помощи производного ключа в один прием.

Расшифрование публичным ключом пользователя функция выполняет следующим образом.

  1. При помощи алгоритма Base64 преобразует строку Text в бинарные данные.
  2. Извлекает сессионный ключ из заголовка бинарных данных. Импортирует сессионный ключ, т.е. дешифрует его приватным ключом пользователя. Параметры EncryptionAlgID, EncryptionKeyLen, HashingAlgID при этом не используются.
  3. Расшифровывает оставшиеся данные сессионным ключом в один прием.

При помощи параметров CSPName и CSPType можно явно указать соответственно имя и тип криптопровайдера (Cryptography Service Provider - CSP), для чего предусмотрены наборы констант CSP_NAME и CSP_TYPE. Криптопровайдер - это модуль операционной системы, содержащий библиотеку криптографических функций со стандартизованным интерфейсом. По умолчанию используется криптопровайдер CSP_NAME_MS_ENHANCED ("Microsoft Enhanced Cryptographic Provider v1.0") с типом CSP_TYPE_RSA_FULL. Узнать набор криптографических алгоритмов, поставляемых криптопровайдером, можно при помощи утилиты EnumAlgs.exe.

Необязательные параметры, начиная с HashingAlgID задавать явно не рекомендуется. Они заведены попросту "на всякий случай".

Если функция выбросила исключение 482, одной из причин может быть неверный пароль.

Исключительные ситуации

Числовой код не является идентификатором алгоритма шифрования Исключение 483
Числовой код не является идентификатором алгоритма хеширования Исключение 484
Исходная строка является некорректной и не может быть декодирована алгоритмом Base64 Исключение 481
Не удалось расшифровать строку Исключение 482

Пример

PlainText := DECRYPTSTR(EncryptedText, Password, CALG_DES);

См. также