Получает из строки закодированной по алгоритму base64 двоичные данные.
Синтаксис
Base64Значение(<Строка>)Полное описание, параметры и ограничения
Глобальный контекст.Base64Значение (Global context.Base64Value)
Глобальный контекст (Global context)
Base64Значение (Base64Value)
Доступен, начиная с версии 8.0.
Синтаксис:
Base64Значение(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Строка, закодированная по алгоритму base64.
Возвращаемое значение:
Тип: ДвоичныеДанные.
Описание:
Получает из строки закодированной по алгоритму base64 двоичные данные.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
Глобальный контекст, метод Base64Строка
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Передать байты как Base64 или показать их в Hex
Для JSON удобно строковое Base64, для диагностики — Hex. Отдельно демонстрируем варианты, где результат хранится буфером или двоичными данными.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Серверный контекст. Учебная строка abc кодируется в UTF-8 без BOM.
В примере стандартное Base64, не вариант base64url для URL или токенов.
Данные = ПолучитьДвоичныеДанныеИзСтроки("abc", КодировкаТекста.UTF8, Ложь);
Буфер = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Данные);
Base64Текст = ПолучитьBase64СтрокуИзДвоичныхДанных(Данные);
HexТекст = ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер);
Сообщить(Base64Текст);
Сообщить(HexТекст);
ИзBase64 = ПолучитьДвоичныеДанныеИзBase64Строки(Base64Текст);
ИзHex = ПолучитьБуферДвоичныхДанныхИзHexСтроки(HexТекст);
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(ИзBase64, КодировкаТекста.UTF8));
Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(ИзHex, КодировкаТекста.UTF8));
Base64Буфер = ПолучитьBase64БуферДвоичныхДанныхИзБуфераДвоичныхДанных(Буфер);
ВосстановленныйБуфер = ПолучитьБуферДвоичныхДанныхИзBase64БуфераДвоичныхДанных(Base64Буфер);
Base64Данные = ПолучитьBase64ДвоичныеДанныеИзДвоичныхДанных(Данные);
ВосстановленныеДанные = ПолучитьДвоичныеДанныеИзBase64ДвоичныхДанных(Base64Данные);
HexБуфер = ПолучитьHexБуферДвоичныхДанныхИзБуфераДвоичныхДанных(Буфер);
БуферПослеHex = ПолучитьБуферДвоичныхДанныхИзHexБуфераДвоичныхДанных(HexБуфер);
HexДанные = ПолучитьHexДвоичныеДанныеИзДвоичныхДанных(Данные);
ДанныеПослеHex = ПолучитьДвоичныеДанныеИзHexДвоичныхДанных(HexДанные);
Сообщить(ПолучитьBase64СтрокуИзБуфераДвоичныхДанных(ВосстановленныйБуфер) = Base64Текст);
Сообщить(ПолучитьHexСтрокуИзДвоичныхДанных(ВосстановленныеДанные) = HexТекст);
Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(БуферПослеHex, КодировкаТекста.UTF8));
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(ДанныеПослеHex, КодировкаТекста.UTF8));
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(HexТекст), КодировкаТекста.UTF8));
Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзBase64Строки(Base64Текст), КодировкаТекста.UTF8));
Сообщить(Base64Строка(Данные) = Base64Текст);
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(Base64Текст), КодировкаТекста.UTF8));Разбор по шагам
Получаем три байта abc и показываем строковые Base64 и Hex.
Декодируем строковые представления и проверяем исходный текст.
Буферные и двоичные варианты кодирования содержат символы кодированного представления, а не исходные три байта.
Декодируем каждый вариант; Base64Строка и Base64Значение показывают старые краткие функции для двоичных данных.
Как проверить результат
Base64 равно YWJj, Hex равно 616263.
Все обратные преобразования выводят abc, сравнения представлений дают Истина.
Не передавайте Hex-строку декодировщику Base64: это другой формат и другой смысл байтов.
Ожидаемый результат
Каждый показанный формат восстанавливает исходные байты при использовании парной функции.
На что обратить внимание
Base64 не шифрует и не защищает данные: любой получатель может их восстановить.
Двоичное содержимое Base64Данные — кодированное представление. Для HTTP-заголовка или JSON обычно нужна строковая функция.
При работе с чужим API не заменяйте Base64 на base64url вручную без проверки его контракта.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Загрузить публичный сертификат оповещением и выгрузить байты
Полный модуль формы показывает параметры обоих callbacks: созданный сертификат приходит первым аргументом инициализации, публичные байты — первым аргументом выгрузки без имени файла.
Где и как запускать
Полный модуль управляемой формы учебной обработки Windows; два callbacks и точная очистка собственного CER.
Подготовка
В отдельной учебной базе создайте внешнюю обработку с пустой управляемой формой, командой УчебныйПример и кнопкой. Укажите действие УчебныйПример и вставьте весь модуль.
Запускайте в Windows-клиенте 8.5.1.1343. НачатьИнициализацию принимает путь CER: поэтому этот урок создаёт ровно один уникальный собственный временный файл.
Встроенный сертификат тот же публичный учебный Syntax Guide Training Only: закрытого ключа, установки в ОС и доверия нет.
Используйте Windows-клиент или Windows-сервер 1С 8.5.1.1343. Проверка других ОС, веб-клиента и расширений криптографии этим уроком не подтверждена.
Не заменяйте учебный сертификат рабочим для первого запуска. Код ничего не подписывает, не импортирует в хранилища, не обращается к OCSP/CRL и не просит пароль.
Перем Выполняется;
&НаКлиенте
Процедура УчебныйПример(Команда)
Если Выполняется = Истина Тогда
Сообщить("Дождитесь завершения своей цепочки сертификата");
Возврат;
КонецЕсли;
ИмяФайла = КаталогВременныхФайлов() + "УчебныйСертификат_" + Строка(Новый УникальныйИдентификатор) + ".cer";
Данные = 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==");
Состояние = Новый Структура("ИмяФайла,СвойФайл,Поток,ОжидаемыеДанные,Сертификат", ИмяФайла, Ложь, Неопределено, Данные, Неопределено);
Выполняется = Истина;
Попытка
Состояние.Поток = Новый ФайловыйПоток(Состояние.ИмяФайла, РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);
Состояние.СвойФайл = Истина;
Состояние.ОжидаемыеДанные.Записать(Состояние.Поток);
Состояние.Поток.Закрыть();
Состояние.Поток = Неопределено;
Состояние.Сертификат = Новый СертификатКриптографии;
Состояние.Сертификат.НачатьИнициализацию(ОповещениеДля("ПослеИнициализации", Состояние), Состояние.ИмяФайла);
Исключение
ОсвободитьСвойФайл(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция ОповещениеДля(Обработчик, Состояние)
Возврат Новый ОписаниеОповещения(Обработчик, ЭтотОбъект, Состояние, "ОшибкаОперации", ЭтотОбъект);
КонецФункции
&НаКлиенте
Процедура ПослеИнициализации(ЗагруженныйСертификат, Состояние) Экспорт
Попытка
Если ТипЗнч(ЗагруженныйСертификат) <> Тип("СертификатКриптографии") Тогда
ВызватьИсключение "Оповещение не вернуло созданный сертификат";
КонецЕсли;
Состояние.Сертификат = ЗагруженныйСертификат;
Сообщить(Base64Строка(Состояние.Сертификат.Отпечаток) = "tRDNiwoaiFssHhQqwyjWVlPLdns=");
Состояние.Сертификат.НачатьВыгрузку(ОповещениеДля("ПослеВыгрузки", Состояние));
Исключение
ОсвободитьСвойФайл(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыгрузки(ВыгруженныеДанные, Состояние) Экспорт
Попытка
Если ТипЗнч(ВыгруженныеДанные) <> Тип("ДвоичныеДанные") Тогда
ВызватьИсключение "Оповещение выгрузки не вернуло публичные байты";
КонецЕсли;
Сообщить(Base64Строка(ВыгруженныеДанные) = Base64Строка(Состояние.ОжидаемыеДанные));
ОсвободитьСвойФайл(Состояние);
ПроверкаФайла = Новый Файл(Состояние.ИмяФайла);
Если ПроверкаФайла.Существует() Тогда
ВызватьИсключение "Очистка собственного CER не завершилась; успешного завершения нет";
КонецЕсли;
Сообщить(Не ПроверкаФайла.Существует());
Выполняется = Ложь;
Сообщить("Учебный публичный сертификат выгружен; свой временный файл удалён");
Исключение
ОсвободитьСвойФайл(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ОшибкаОперации(Ошибка, СтандартнаяОбработка, Состояние) Экспорт
ОсвободитьСвойФайл(Состояние);
Выполняется = Ложь;
СтандартнаяОбработка = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОсвободитьСвойФайл(Состояние)
Если Состояние.Поток <> Неопределено Тогда
Попытка
Состояние.Поток.Закрыть();
Состояние.Поток = Неопределено;
Исключение
Сообщить("Не удалось закрыть собственный CER-поток: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Если Состояние.СвойФайл Тогда
Попытка
УдалитьФайлы(Состояние.ИмяФайла);
Состояние.СвойФайл = Ложь;
Исключение
Сообщить("Не удалось удалить только собственный временный CER: " + Состояние.ИмяФайла + "; " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедурыРазбор по шагам
СоздатьНовый создаёт только новое уникальное имя; флаг собственности ставится после успешного открытия, затем поток закрывается до начала чтения.
НачатьИнициализацию получает оповещение и имя файла. ПослеИнициализации(ЗагруженныйСертификат, Состояние) принимает созданный объект и сохраняет его в состоянии.
НачатьВыгрузку без файлового имени возвращает данные в ПослеВыгрузки(ВыгруженныеДанные, Состояние). Сравниваем их с исходным DER.
После завершения удаляем точный собственный CER под защитой флага и проверяем отсутствие. Коллекции сертификатов ОС не меняются.
Флаг Выполняется препятствует повторному старту. Ошибки операции и ошибки следующего шага идут через очистку, а не через сообщение об успешном завершении.
Как проверить результат
Три сравнения Истина: отпечаток, исходные DER-байты и отсутствие своего файла.
При повторном нажатии до окончания ожидается сообщение дождаться своей цепочки.
При отказе удаления выводится точное имя; отдельная проверка вызывает исключение до сообщения об успешном завершении.
Ожидаемый результат
Созданный результат инициализации и результат публичной выгрузки обработаны правильными callbacks.
На что обратить внимание
Вариант НачатьВыгрузку с файловым именем возвращает имя, а не байты: его обработчик должен иметь соответствующий первый аргумент.
Не подставляйте путь к рабочему сертификату: этот модуль должен обслуживать только созданный им CER.
Нельзя удалять CER сразу после НачатьИнициализацию: асинхронная операция ещё может читать его.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.