ДвоичныеДанные.Размер

Методы · Size

Получает размер двоичных данных в байтах.

Синтаксис

Размер()
Полное описание, параметры и ограничения

ДвоичныеДанные.Размер (BinaryData.Size)

ДвоичныеДанные (BinaryData)

Размер (Size)

Доступен, начиная с версии 8.2.

Синтаксис:
Размер()
Возвращаемое значение:
Тип: Число.

Описание:

Получает размер двоичных данных в байтах.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Преобразовать русское название в UTF-8 и вернуть обратно

Размер строки в символах и размер передаваемых байтов различаются. Явно выбираем UTF-8 без BOM для обмена.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Выполняйте на сервере; файл не создаётся, сеть не используется.

  2. В первом запуске оставьте название Книга и параметр ЗаписатьBOM равным Ложь.

Название = "Книга";
Данные = ПолучитьДвоичныеДанныеИзСтроки(Название, КодировкаТекста.UTF8, Ложь);
Буфер = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Данные);
Сообщить(СтрДлина(Название));
Сообщить(Данные.Размер());
Сообщить(Буфер.Размер);
НазваниеИзДанных = ПолучитьСтрокуИзДвоичныхДанных(Данные, КодировкаТекста.UTF8);
НазваниеИзБуфера = ПолучитьСтрокуИзБуфераДвоичныхДанных(Буфер, КодировкаТекста.UTF8);
Сообщить(НазваниеИзДанных = Название);
Сообщить(НазваниеИзБуфера = Название);
ДругойБуфер = ПолучитьБуферДвоичныхДанныхИзСтроки(Название, КодировкаТекста.UTF8, Ложь);
ДругиеДанные = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ДругойБуфер);
Сообщить(ДругиеДанные.Размер() = Данные.Размер());

Разбор по шагам

  1. Кодируем строку в двоичные данные с явно заданной кодировкой.

  2. Преобразуем двоичные данные в изменяемый буфер и сравниваем размеры.

  3. Декодируем данные и буфер той же кодировкой и проверяем равенство исходному названию.

  4. Повторяем путь через создание буфера прямо из строки.

Как проверить результат

  1. В названии 5 символов, в UTF-8 без BOM 10 байтов.

  2. Оба обратных преобразования возвращают Книга; все сравнения равны Истина.

Ожидаемый результат

Название восстановлено без потери русских букв; различие байтов и символов показано явно.

На что обратить внимание

  1. Передавая длину в сетевой протокол, уточните, требуются байты или символы: СтрДлина не заменяет размер UTF-8.

  2. Декодирование другой кодировкой может дать испорченный текст. BOM добавляйте только если его ждёт принимающая сторона.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Разобрать назначения ключа и ограничения УЦ

У образца заданы Basic Constraints, Key Usage и Extended Key Usage. Сравниваем разобранные значения с исходными DER-расширениями и не путаем назначение с наличием закрытого ключа.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

  2. Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.

  3. Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.

  4. В пример встроен отдельный публичный учебный X.509-сертификат Syntax Guide Training Only. Его закрытый ключ не сохранён, сертификат не установлен в хранилище ОС и не признан доверенным.

  5. Используйте Windows-клиент или Windows-сервер 1С 8.5.1.1343. Проверка других ОС, веб-клиента и расширений криптографии этим уроком не подтверждена.

  6. Не заменяйте учебный сертификат рабочим для первого запуска. Код ничего не подписывает, не импортирует в хранилища, не обращается к OCSP/CRL и не просит пароль.

ИсходныеДанные = Base64Значение("MIIC+jCCAeKgAwIBAgIBVTANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpTeW50YXggR3VpZGUgVHJhaW5pbmcgT25seTAeFw0yMDAxMDEwMDAwMDBaFw0zNTEyMzEwMDAwMDBaMCUxIzAhBgNVBAMMGlN5bnRheCBHdWlkZSBUcmFpbmluZyBPbmx5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkraGtF6mSMHQWI0lIdDxzNjLTB0VHmtLUYEIxXFFJepQtyMGWZ9rfpbTglFp8wpsw+Wc09FQyDFuKsNz3cBcBBx7fTmJVuYzfrXjhDECNqEoKMEf+Qrim3WsVKA/Qr8IMnzq1qdnA1pLgaaKyscfCJkw9W1yoTlLV3PmGs6h6gP1/KXwe+zKN5r3Jl0IVk8RXTLAeyqN01lCuyzaeSYm/v2YS88LdaJ/nkdFqy5QjRXfm7EOCW7eCZlCBwW0EvGhUarZxWlq04lPs9qu3aC3/6gY/scE2vY1jeZV2VpV0lLQpU5gVdjVGI4YQmfgkb8jYtV5U7FQ1KQ6Poji/ort6wIDAQABozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEARoo1FJJKKkaZXyFl1tlYj8K7xvryXwhb+tCaFvdXuON27YC3/YIHLUT9sCF9o76VIT8dsVMpK0Qo+VV0FIvqRcB+u6SmyJ+Y7590mzd5P1CSt8Y/4BNV2LosYxhcdVczs26PWHL5GXyBMWRxtBjNsnTeMKh4/WIMrplAr0IOJCmjIeKhv0JbQacsNqhmpe7JdgtBYC4Rrn3ajdD99HZREmyLR/iJrh6W4IGqSN0MGT0xL/mLI0GsTp9JhHDF3o8bmC1yMDlLOoAZp7M072bzfDsKFPg4ATQp/hhbtsTdS/LXrd9cLehZ7ThH6ljL8y2JbALD+6HPnT6Sv+Mg0Wq0MA==");
Сертификат = Новый СертификатКриптографии(ИсходныеДанные);
Дополнения = Сертификат.ДополненияСертификата;
ОграниченияУЦ = Дополнения.Получить("2.5.29.19");
Если ТипЗнч(ОграниченияУЦ) <> Тип("Булево") Тогда
    ВызватьИсключение "У учебного образца не разобрано Basic Constraints";
КонецЕсли;
Сообщить(ОграниченияУЦ = Ложь);
Назначения = Дополнения.Получить("2.5.29.37");
Если Назначения = Неопределено Тогда
    ВызватьИсключение "В учебном образце нет Extended Key Usage";
КонецЕсли;
Сообщить(Назначения.Найти("1.3.6.1.5.5.7.3.2") <> Неопределено);
СырыеДополнения = Сертификат.ДополненияСертификатаКакИсходныеДанные;
СыройBasic = СырыеДополнения.Получить("2.5.29.19");
Если СыройBasic = Неопределено Тогда
    ВызватьИсключение "Нет исходных байтов учебного ограничения УЦ";
КонецЕсли;
Сообщить(ТипЗнч(СыройBasic) = Тип("ДвоичныеДанные"));
Сообщить(СыройBasic.Размер() > 0);
ДополнительныйEKU = Неопределено;
Если Сертификат.РасширенныеСвойства.Свойство("EKU", ДополнительныйEKU) Тогда
    Сообщить("EKU в расширенных свойствах: " + Строка(ДополнительныйEKU.Количество()));
Иначе
    Сообщить("EKU в расширенных свойствах не предоставлен");
КонецЕсли;
Сообщить("Назначение для подписи: " + Строка(Сертификат.ИспользоватьДляПодписи));
Сообщить("Назначение для шифрования: " + Строка(Сертификат.ИспользоватьДляШифрования));

Разбор по шагам

  1. OID 2.5.29.19 в разобранном Соответствие даёт Булево: у нашего образца Ложь, то есть это не сертификат УЦ.

  2. OID 2.5.29.37 даёт массив назначений; у образца есть назначение Client Authentication.

  3. В ДополненияСертификатаКакИсходныеДанные тот же OID даёт ДвоичныеДанные, а не готовое Булево.

  4. РасширенныеСвойства может содержать EKU; сначала проверяем наличие поля.

  5. ИспользоватьДляПодписи/Шифрования читаем как признаки назначения. Они не поставляют отсутствующий закрытый ключ и не устанавливают доверие.

Как проверить результат

  1. Четыре сравнения Истина; вывод признаков назначения и EKU диагностический.

  2. Проверьте в отладчике: Basic Constraints в двух соответствиях имеет разные типы значений.

Ожидаемый результат

Разобраны конкретные расширения публичного образца без обращения к хранилищам.

На что обратить внимание

  1. Двоичное DER-расширение нельзя напрямую использовать как логический признак.

  2. Назначение ключа не гарантирует, что можно подписать файл: закрытый ключ и права на него нужны отдельно.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.