Двоичные данные и кодировка Base64 в 1С 8.Х

22.01.14

Разработка - Универсальные функции

Как преобразовать строку, закодированную при помощи алгоритма Base64, в массив байтов и обратно

Двоичные данные и кодировка Base64 в 1С 8.Х

Считать данные из двоичного файла можно при помощи функции ДвоичныеДанные(ИмяФайла). Например:

ДД = ДвоичныеДанные(ИмяФайла);

Здесть ДД - специальный объект, который называется "двоичные данные".
В языке 1С есть функция, которая преобразует двоичные данные в строку Base64Строка(ДвоичныеДанные). Например:

Строка64 = Base64Строка(ДвоичныеДанные);

Здесь Строка64 - обычная строка, с которой можно делать все, что угодно.
В конце статьи приведена функция Преобразовать64(Строка64 = неопределено, Массив64 = неопределено),  которая преобразовывает строку в массив байтов, и обратно.
Для того, чтобы получить массив байтов из строки, вызываем ее так:

Массив64 = Преобразовать64(Строка64 , );

Для обратного преобразования вызываем так:

Строка64 = Преобразовать64( , Массив64 );

Про алгоритм кодировки Base64 см.: 
http://ru.wikipedia.org/wiki/Base64

http://habrahabr.ru/post/190054/

Преобразовать строку в двоичные данные можно при помощи функции Base64Значение(Строка64).

Все указанные функции, кроме Преобразовать64, являются встроенными функциям платформы.

 

Далее листинг функции Преобразовать64.

&НаСервере
Функция Преобразовать64(Строка64 = неопределено, Массив64 = неопределено)
 Таб64 = Новый ТаблицаЗначений;
 Таб64.Колонки.Добавить("Код");
 Таб64.Колонки.Добавить("Символ");
 Нпп = 0;
 Для Код = КодСимвола("A") По КодСимвола("Z") Цикл
  стр = Таб64.Добавить();
  стр.Код = Нпп;
  стр.Символ = Символ(Код);
  Нпп = Нпп + 1;
 КонецЦикла;
 Для Код = КодСимвола("a") По КодСимвола("z") Цикл
  стр = Таб64.Добавить();
  стр.Код = Нпп;
  стр.Символ = Символ(Код);
  Нпп = Нпп + 1;
 КонецЦикла;
 стр = Таб64.Добавить();
 стр.Код = Нпп;
 стр.Символ = "0";
 Нпп = Нпп + 1;
 Для Код = 1 По 9 Цикл
  стр = Таб64.Добавить();
  стр.Код = Нпп;
  стр.Символ = Формат(Код,"ЧЦ=1; ЧДЦ=0");
  Нпп = Нпп + 1;
 КонецЦикла;
 стр = Таб64.Добавить();
 стр.Код = Нпп;
 стр.Символ = "+";
 Нпп = Нпп + 1;
 стр = Таб64.Добавить();
 стр.Код = Нпп;
 стр.Символ = "/";
 
 Если Массив64 = неопределено Тогда 
  Если Строка64 = неопределено Тогда
   Сообщить("неверный вызов функции");
   Возврат неопределено;
  КонецЕсли;
  //Уберем переносы строк
  Строка64 = СтрЗаменить(Строка64, Символ(10), "");
  Строка64 = СтрЗаменить(Строка64, Символ(13), "");
  
  //преобразовываем строку в массив
  Если СтрДлина(Строка64) % 4 <> 0 Тогда
   Сообщить("длина строки на входе должна быть кратна 4"); 
   Сообщить(СтрДлина(Строка64)); 
   Возврат неопределено;
  КонецЕсли;
  Кол4 = Цел(СтрДлина(Строка64) / 4);
  РазмерМ = Кол4 * 3;
  Если Прав(Строка64, 2) = "==" Тогда
   РазмерМ = РазмерМ - 2;
  ИначеЕсли Прав(Строка64, 1) = "=" Тогда
   РазмерМ = РазмерМ - 1;
  КонецЕсли;   
  Массив64 = Новый Массив(РазмерМ);
  Для А = 1 По Кол4 Цикл
   Число3 = 0;
   Для Б = 1 По 4 Цикл
    Буква1 = Сред(Строка64, (А-1)*4 + Б, 1); 
    Если Буква1 = "=" Тогда
     Код4 = 0;
    Иначе
     стрН = Таб64.Найти(Буква1, "Символ");
     Если стрН = Неопределено Тогда
      Сообщить("ошибка при поиске "+ КодСимвола(Буква1)); 
     Иначе 
      Код4 = стрН.Код;
     КонецЕсли;
    КонецЕсли;
    Число3 = Число3 * 64 + Код4;
   КонецЦикла;
   Ост = Число3 % 256;
   Индекс = (А-1)*3 + 2;
   Если Индекс <= РазмерМ - 1 Тогда
    Массив64[Индекс] = Ост;
   КонецЕсли;
   Число3 = (Число3 - Ост) / 256;
   Ост = Число3 % 256;
   Индекс = (А-1)*3 + 1;
   Если Индекс <= РазмерМ - 1 Тогда
    Массив64[Индекс] = Ост;
   КонецЕсли;
   Число3 = (Число3 - Ост) / 256;
   Ост = Число3 % 256;
   Массив64[(А-1)*3 + 0] = Ост;
  КонецЦикла;
  Возврат Массив64;
 Иначе //Преобразовываем массив в строку
  Строка64 = "";
  Кол3 = Цел(Массив64.Количество() / 3);
  Если Массив64.Количество() % 3 <> 0 Тогда
   Кол3 = Кол3 + 1;
  КонецЕсли;
  Для А = 1 По Кол3 Цикл
   Число3 = Массив64[(А-1)*3]; 
   Если (А-1)*3+1 <= Массив64.ВГраница() Тогда
    Код3 = Массив64[(А-1)*3+1];
   Иначе
    Код3 = 0;
   КонецЕсли;
   Число3 = Число3*256 + Код3;
   Если (А-1)*3+2 <= Массив64.ВГраница() Тогда
    Код3 = Массив64[(А-1)*3+2];
   Иначе
    Код3 = 0;
   КонецЕсли;
   Число3 = Число3*256 + Код3;
   
   Ост4 = Число3 % 64;
   Число3 = (Число3 - Ост4) / 64;
   Ост3 = Число3 % 64;
   Число3 = (Число3 - Ост3) / 64;
   Ост2 = Число3 % 64;
   Число3 = (Число3 - Ост2) / 64;
   Ост1 = Число3 % 64;
   Число3 = (Число3 - Ост1) / 64;
   стрН = Таб64.Найти(Ост1, "Код");
   Если стрН = неопределено Тогда
    Сообщить("Ошибка при поиске");
   Иначе
    Строка64 = Строка64 + стрН.Символ;
   КонецЕсли;
   стрН = Таб64.Найти(Ост2, "Код");
   Если стрН = неопределено Тогда
    Сообщить("Ошибка при поиске");
   Иначе
    Строка64 = Строка64 + стрН.Символ;
   КонецЕсли;
   стрН = Таб64.Найти(Ост3, "Код");
   Если стрН = неопределено Тогда
    Сообщить("Ошибка при поиске");
   Иначе
    Строка64 = Строка64 + стрН.Символ;
   КонецЕсли;
   стрН = Таб64.Найти(Ост4, "Код");
   Если стрН = неопределено Тогда
    Сообщить("Ошибка при поиске");
   Иначе
    Строка64 = Строка64 + стрН.Символ;
   КонецЕсли;
  КонецЦикла;
  //Если количество символов не делится на 3, то на конце должны быть
  //знаки "="
  Если Массив64.Количество() % 3 = 1 Тогда
   Строка64 = Лев(Строка64, СтрДлина(Строка64)-2)+ "=="; 
  ИначеЕсли Массив64.Количество() % 3 = 2 Тогда
   Строка64 = Лев(Строка64, СтрДлина(Строка64)-1)+ "="; 
  КонецЕсли;
  Возврат Строка64;
 КонецЕсли;
КонецФункции

Base64

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    17019    dimanich70    81    

135

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    3823    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    14121    atdonya    23    

56

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5226    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    13550    YA_418728146    7    

165

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3294    52    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18074    160    sapervodichka    112    

134
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Гость 22.01.14 08:26
Автор, на ошибки проверяли?
4. Гобсек 23 22.01.14 10:30 Сейчас в теме
(1) Гость,
Процедура рабочая
2. andrewks 1375 22.01.14 08:29 Сейчас в теме
для кого/чего эта статья? или чисто учебные цели - демонстрация реализации алгоритма кодирования base64 на языке 1с?
5. Гобсек 23 22.01.14 10:36 Сейчас в теме
(2) andrewks,

Мне понадобилась такая процедура для перекодировки. К своему удивлению, готовой на языке 1С в Интернете я не нашел. Написал свою. Сегодня на одном из форумов увидел, что один из участников спрашивал про такую процедуру. Я выложил сюда. Кому надо, пусть пользуются.
11. andrewks 1375 22.01.14 12:29 Сейчас в теме
(5)
Мне понадобилась такая процедура для перекодировки.

для перекодировки чего? мне непонятна практическая цель.

если цель - демонстрация реалтизации алгоритма, тогда без вопросов
13. Гобсек 23 22.01.14 12:44 Сейчас в теме
(11)Практическая задача: банк присылает файлы *.DBF Их содержимое нужно загружать в 1С. Для того, чтобы стандартно обработать файл при помощи объекта XBASE, нужно сначала снять электронную подпись. Программное обеспечение для электронных подписей на данном компьютере ставить не планируется. Делаем так. Из заголовка файла узнаем какая у него должна быть длина. Если фактическая длина больше на заданное число байт, то конец файла обрезаем. Для реализации схемы нужно работать с двоичными данными. Все достаточно просто. Вопрос возник только с перекодировкой Base64 туда и обратно.
14. andrewks 1375 22.01.14 13:13 Сейчас в теме
(13) т.е. Вам нужно ДД (двоичные данные) обрезать, и сохранить в файл, я правильно понял? а для чего, собственно, Массив?
16. Гобсек 23 22.01.14 13:21 Сейчас в теме
(14)Чтобы проанализировать заголовок DBF файла.
18. andrewks 1375 22.01.14 13:30 Сейчас в теме
(16) ага, ясно.
т.е. берёте размер из заголовка и просто отсекаете подпись, которая идёт в самом конце файла.

задача, конечно, извращённая :)

а точно длина подписи не постоянна?
19. Гобсек 23 22.01.14 13:36 Сейчас в теме
(18)Зато никаких внешних компонент и тому подобное. Не нужно держать в голове, что на данном компьютере должно быть установлено для нормальной работы.
Длина подписи постоянна. Но нужно проверить, она есть или ее нету.
user1632735; CratosX; +2 Ответить
20. yku 376 25.01.14 21:52 Сейчас в теме
(11), (13) Приведу еще один пример.
Дано: базы ЗУП и БП на скуле.
Справочник физ. лица синхронизирован по ссылке.
В ЗУПе есть внешний источник данных - справочник физ. лиц из БП.
Нужно, находясь в ЗУПе получить данные по конкретному физ лицу из БП.
Но ссылки во внешнем источнике данных имеют тип Binary(16).
Т.е. нам нужно преобразовать уникальный идентификатор в двоичные данные.
Алгоритм такой
УникальныйИдентификатор -> "51012ccc-397d-11de-b595-00055d80a2b9" -> "b59500055d80a2b911de397d51012ccc" -> Числовой массив из шестнадцати байтов -> СтрокаBase64 -> ДвоичныеДанные -> Запрос "Где Внеш_ФизЛица.Ссылка = &ДвоичныеДанные"

PS:
-> ???? -> PROFIT!!!
tarassov; +1 Ответить
21. sokir 2 22.09.14 12:35 Сейчас в теме
(20) yku, не понял как из "51012ccc-397d-11de-b595-00055d80a2b9" получено "b59500055d80a2b911de397d51012ccc". Можно поподробнее?
22. AllexSoft 21.11.14 13:52 Сейчас в теме
(20) yku, весе просто, переверните "51012ccc-397d-11de-b595-00055d80a2b9" и удалите "-" и все поймете
33. user611515_akorneev 23.08.18 20:42 Сейчас в теме
(11) Имя отправителя e-mail в кириллице перекодировать, чтобы почтовые клиенты корректно отображали
3. lefthander 22.01.14 09:28 Сейчас в теме
А на рубрику обратили внимание? Правильно, практика программирования - вполне уместно.
Спасибо автору.
6. tusv 212 22.01.14 10:38 Сейчас в теме
Отрывок кода
Если Индекс Массив64[Индекс] = Ост;
КонецЕсли;

Что это?
8. Гобсек 23 22.01.14 11:55 Сейчас в теме
(6) tusv,
(7)Гость
Видимо, копирование-вставка прошли некорректно. Сейчас думаю, то ли править статью, то ли выложить внешнюю обработку. Или в виде эксперимента выложить листинг в комментарий и посмотреть, корректно ли он скопируется.
7. Гость 22.01.14 10:41
извините, вот это мне не понятно.

Если Индекс Массив64[Индекс] = Ост;
КонецЕсли;
9. Гобсек 23 22.01.14 11:56 Сейчас в теме
Выкладываю листинг в комментарий:
&НаСервере
Функция Преобразовать64(Строка64 = неопределено, Массив64 = неопределено)
	Таб64 = Новый ТаблицаЗначений;
	Таб64.Колонки.Добавить("Код");
	Таб64.Колонки.Добавить("Символ");
	Нпп = 0;
	Для Код = КодСимвола("A") По КодСимвола("Z") Цикл
		стр = Таб64.Добавить();
		стр.Код = Нпп;
		стр.Символ = Символ(Код);
		Нпп = Нпп + 1;
	КонецЦикла;
	Для Код = КодСимвола("a") По КодСимвола("z") Цикл
		стр = Таб64.Добавить();
		стр.Код = Нпп;
		стр.Символ = Символ(Код);
		Нпп = Нпп + 1;
	КонецЦикла;
	стр = Таб64.Добавить();
	стр.Код = Нпп;
	стр.Символ = "0";
	Нпп = Нпп + 1;
	Для Код = 1 По 9 Цикл
		стр = Таб64.Добавить();
		стр.Код = Нпп;
		стр.Символ = Формат(Код,"ЧЦ=1; ЧДЦ=0");
		Нпп = Нпп + 1;
	КонецЦикла;
	стр = Таб64.Добавить();
	стр.Код = Нпп;
	стр.Символ = "+";
	Нпп = Нпп + 1;
	стр = Таб64.Добавить();
	стр.Код = Нпп;
	стр.Символ = "/";
	
	Если Массив64 = неопределено Тогда 
		Если Строка64 = неопределено Тогда
			Сообщить("неверный вызов функции");
			Возврат неопределено;
		КонецЕсли;
		//Уберем переносы строк
		Строка64 = СтрЗаменить(Строка64, Символ(10), "");
		Строка64 = СтрЗаменить(Строка64, Символ(13), "");
		
		//преобразовываем строку в массив
		Если СтрДлина(Строка64) % 4 <> 0 Тогда
			Сообщить("длина строки на входе должна быть кратна 4"); 
			Сообщить(СтрДлина(Строка64)); 
			Возврат неопределено;
		КонецЕсли;
		Кол4 = Цел(СтрДлина(Строка64) / 4);
		РазмерМ = Кол4 * 3;
		Если Прав(Строка64, 2) = "==" Тогда
			РазмерМ = РазмерМ - 2;
		ИначеЕсли Прав(Строка64, 1) = "=" Тогда
			РазмерМ = РазмерМ - 1;
		КонецЕсли;			
		Массив64 = Новый Массив(РазмерМ);
		Для А = 1 По Кол4 Цикл
			Число3 = 0;
			Для Б = 1 По 4 Цикл
				Буква1 = Сред(Строка64, (А-1)*4 + Б, 1);	
				Если Буква1 = "=" Тогда
					Код4 = 0;
				Иначе
					стрН = Таб64.Найти(Буква1, "Символ");
					Если стрН = Неопределено Тогда
						Сообщить("ошибка при поиске "+ КодСимвола(Буква1));	
					Иначе 
						Код4 = стрН.Код;
					КонецЕсли;
				КонецЕсли;
				Число3 = Число3 * 64 + Код4;
			КонецЦикла;
			Ост = Число3 % 256;
			Индекс = (А-1)*3 + 2;
			Если Индекс <= РазмерМ - 1 Тогда
				Массив64[Индекс] = Ост;
			КонецЕсли;
			Число3 = (Число3 - Ост) / 256;
			Ост = Число3 % 256;
			Индекс = (А-1)*3 + 1;
			Если Индекс <= РазмерМ - 1 Тогда
				Массив64[Индекс] = Ост;
			КонецЕсли;
			Число3 = (Число3 - Ост) / 256;
			Ост = Число3 % 256;
			Массив64[(А-1)*3 + 0] = Ост;
		КонецЦикла;
		Возврат Массив64;
	Иначе //Преобразовываем массив в строку
		Строка64 = "";
		Кол3 = Цел(Массив64.Количество() / 3);
		Если Массив64.Количество() % 3 <> 0 Тогда
			Кол3 = Кол3 + 1;
		КонецЕсли;
		Для А = 1 По Кол3 Цикл
			Число3 = Массив64[(А-1)*3];	
			Если (А-1)*3+1 <= Массив64.ВГраница() Тогда
				Код3 = Массив64[(А-1)*3+1];
			Иначе
				Код3 = 0;
			КонецЕсли;
			Число3 = Число3*256 + Код3;
			Если (А-1)*3+2 <= Массив64.ВГраница() Тогда
				Код3 = Массив64[(А-1)*3+2];
			Иначе
				Код3 = 0;
			КонецЕсли;
			Число3 = Число3*256 + Код3;
			
			Ост4 = Число3 % 64;
			Число3 = (Число3 - Ост4) / 64;
			Ост3 = Число3 % 64;
			Число3 = (Число3 - Ост3) / 64;
			Ост2 = Число3 % 64;
			Число3 = (Число3 - Ост2) / 64;
			Ост1 = Число3 % 64;
			Число3 = (Число3 - Ост1) / 64;
			стрН = Таб64.Найти(Ост1, "Код");
			Если стрН = неопределено Тогда
				Сообщить("Ошибка при поиске");
			Иначе
				Строка64 = Строка64 + стрН.Символ;
			КонецЕсли;
			стрН = Таб64.Найти(Ост2, "Код");
			Если стрН = неопределено Тогда
				Сообщить("Ошибка при поиске");
			Иначе
				Строка64 = Строка64 + стрН.Символ;
			КонецЕсли;
			стрН = Таб64.Найти(Ост3, "Код");
			Если стрН = неопределено Тогда
				Сообщить("Ошибка при поиске");
			Иначе
				Строка64 = Строка64 + стрН.Символ;
			КонецЕсли;
			стрН = Таб64.Найти(Ост4, "Код");
			Если стрН = неопределено Тогда
				Сообщить("Ошибка при поиске");
			Иначе
				Строка64 = Строка64 + стрН.Символ;
			КонецЕсли;
		КонецЦикла;
		//Если количество символов не делится на 3, то на конце должны быть
		//знаки "="
		Если Массив64.Количество() % 3 = 1 Тогда
			Строка64 = Лев(Строка64, СтрДлина(Строка64)-2)+ "==";	
		ИначеЕсли Массив64.Количество() % 3 = 2 Тогда
			Строка64 = Лев(Строка64, СтрДлина(Строка64)-1)+ "=";	
		КонецЕсли;
		Возврат Строка64;
	КонецЕсли;
КонецФункции
Показать
10. Гобсек 23 22.01.14 11:58 Сейчас в теме
Выкладываю обработку. Там только листинг процедуры.
Прикрепленные файлы:
Проба64.epf
12. Гобсек 23 22.01.14 12:36 Сейчас в теме
Статью переделал. Теперь вроде все нормально.
15. miap 22.01.14 13:20 Сейчас в теме
Внешнюю обработку, конечно, надо. а то код разбросан уже по коментам, неудобно. Если б я не прочел коменты, не догадался бы.
17. Гобсек 23 22.01.14 13:24 Сейчас в теме
(15)Я статью уже исправил. Теперь вроде все нормально. Код процедуры можно взять из статьи.
23. uri1978 137 25.05.16 17:48 Сейчас в теме
Строка64 - обычная строка

Работает только с английским алфавитом и цифрами...
24. Sevg 16 23.06.16 16:20 Сейчас в теме
Пример моего кода
новКартБМП=Новый Картинка(QRkod);
HEXСтрокаКартинка=СтрЗаменить(""+новКартБМП.ПолучитьДвоичныеДанные()," ","");
и анализировать вроде быстрее HEXстроку
25. AlexeyDmuhin 25.07.16 10:41 Сейчас в теме
Спасибо за функцию Преобразовать64!

я с ее помощью получаю хэш-строку в base64 :)

Функция ВычислитьНаСервереХешСтрокиПоАлгоритму_HMAC_SHA256(Строка, Ключ, ВернутьBase64 = Истина) Экспорт
	
	Текст = Новый COMОбъект("System.Text.UTF8Encoding");
	КриптоSHA256 = Новый COMОбъект("System.Security.Cryptography.HMACSHA256");
	КриптоSHA256.key = Текст.GetBytes_4(Ключ);
	Если ВернутьBase64 Тогда
		
		Хэш256 = КриптоSHA256.ComputeHash_2(Текст.GetBytes_4(Строка)).Выгрузить();
		СтрокаХэша = Преобразовать64(, Хэш256);
		
	Иначе	
		
		Хэш256 = КриптоSHA256.ComputeHash_2(Текст.GetBytes_4(Строка));
		оStr = Новый COMОбъект("System.Text.StringBuilder");
		Для Каждого стр Из Хэш256 Цикл
		    оStr.AppendFormat("{0:x02}", стр);
		КонецЦикла;

		СтрокаХэша = оStr.ToString; //последовательность байтов
		
	КонецЕсли;
		
	Возврат СтрокаХэша;
	
КонецФункции
Показать


до этого считал на Jawa-скрипте через MSScriptControl, но траблы и их решение при переводе на 64-bit сервер не устроили
unoDosTres; kazann; +2 Ответить
27. alex_pshkv 24 18.10.17 13:37 Сейчас в теме
(25)
Возникали у вас какие-нибудь проблемы при использовании библиотек кодирования NET на 64-битном сервере? Что-нибудь настраивали?
28. AlexeyDmuhin 18.10.17 14:03 Сейчас в теме
(27) Сейчас уже не помню. Пересели на 8.3.10 - а под нее уже есть реализация вычисления хэша встроенными средствами платформы.
29. alex_pshkv 24 18.10.17 14:17 Сейчас в теме
(28)
Жаль, что не помните, но все равно спасибо за ответ.
30. unoDosTres 05.02.18 19:24 Сейчас в теме
(28)
Шифрования HMAС встроенного все равно нет :(
может поделитесь кодом, если есть откуда взять как реализовывали, ну чтобы без comОБъектов
32. AlexeyDmuhin 06.02.18 00:36 Сейчас в теме
(30)

Взял по адресу https://infostart.ru/public/611505/
и доработал под себя, функции в прикрепленном файле
Прикрепленные файлы:
Хеширование.txt
unoDosTres; +1 Ответить
26. mrbus 17.08.17 10:32 Сейчас в теме
ЗакодированноеЗначение = "OgEDmDjPAgyGeEono3y20tK7+to=";
РаскодированноеЗначение = Строка(Base64Значение(ЗакодированноеЗначение));	// "3A 01 03 98 38 CF 02 0C 86 78 4A 27 A3 7C B6 D2 D2 BB FA DA"
Сообщить("ПРОФИТ!");
31. SlavaKron 05.02.18 21:02 Сейчас в теме
Перем Ч64;

Функция МассивВСтроку64(МассивБайтов)


	Массив = Новый Массив;
	s = "";
	Остаток = МассивБайтов.Количество() % 3;
	Если Остаток > 0 Тогда
		Для Сч = 1 По 3 - Остаток Цикл
			МассивБайтов.Добавить(0);
		КонецЦикла;
	КонецЕсли;
	Количество = Цел(МассивБайтов.Количество() / 3) - 1;
	Для i = 0 По Количество Цикл
		Число24Бит = МассивБайтов[i * 3] * 65536 + МассивБайтов[i * 3 + 1] * 256 + МассивБайтов[i * 3 + 2];		
		s = s + Ч64[Цел(Число24Бит / 4096)] + Ч64[Число24Бит % 4096];
		Если СтрДлина(s) = 64 Тогда
			Массив.Добавить(s);
			s = "";
		КонецЕсли;
	КонецЦикла;
	Если s <> "" Тогда
		Массив.Добавить(s);
	КонецЕсли;
	Возврат Сред(СтрЗаменить(ЗначениеВСтрокуВнутр(Массив), """}," + Символы.ПС + "{""S"",""", ""), 53 + СтрДлина(Формат(Массив.Количество(), "ЧГ=")));	
КонецФункции

Ч64 = Новый Массив(4096);
Символы64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456­789+/";
Для Сч = 0 По 4095 Цикл
	Ч64[Сч] = Сред(Символы64, Цел(Сч / 64) + 1, 1) + Сред(Символы64, Сч % 64 + 1, 1)
КонецЦикла;
Показать
Оставьте свое сообщение