<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wiki.kint.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_%281Cv8%29</id>
	<title>Генерация хэша строки (1Cv8) - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.kint.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_%281Cv8%29"/>
	<link rel="alternate" type="text/html" href="http://wiki.kint.ru/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_(1Cv8)&amp;action=history"/>
	<updated>2026-05-21T03:08:22Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.31.15</generator>
	<entry>
		<id>http://wiki.kint.ru/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_(1Cv8)&amp;diff=87534&amp;oldid=prev</id>
		<title>Дмитрий Малюгин: Дмитрий Малюгин переименовал страницу Генерация хэша строки (1cv8) в Генерация хэша строки (1Cv8) без оставления перенаправления</title>
		<link rel="alternate" type="text/html" href="http://wiki.kint.ru/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_(1Cv8)&amp;diff=87534&amp;oldid=prev"/>
		<updated>2024-12-03T15:45:26Z</updated>

		<summary type="html">&lt;p&gt;Дмитрий Малюгин переименовал страницу &lt;a href=&quot;/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_(1cv8)&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Генерация хэша строки (1cv8) (страница не существует)&quot;&gt;Генерация хэша строки (1cv8)&lt;/a&gt; в &lt;a href=&quot;/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_(1Cv8)&quot; title=&quot;Генерация хэша строки (1Cv8)&quot;&gt;Генерация хэша строки (1Cv8)&lt;/a&gt; без оставления перенаправления&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Версия 15:45, 3 декабря 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Дмитрий Малюгин</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.kint.ru/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_(1Cv8)&amp;diff=21545&amp;oldid=prev</id>
		<title>Павел Лазарев: Новая страница: «Категория:Примеры кода 1С  __TOC__  Некоторые реализации: ==Хэш строки== &lt;source lang=1c&gt; Функция стр...»</title>
		<link rel="alternate" type="text/html" href="http://wiki.kint.ru/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%85%D1%8D%D1%88%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8_(1Cv8)&amp;diff=21545&amp;oldid=prev"/>
		<updated>2010-10-07T05:52:48Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&lt;a href=&quot;/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%BA%D0%BE%D0%B4%D0%B0_1%D0%A1&quot; title=&quot;Категория:Примеры кода 1С&quot;&gt;Категория:Примеры кода 1С&lt;/a&gt;  __TOC__  Некоторые реализации: ==Хэш строки== &amp;lt;source lang=1c&amp;gt; Функция стр...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Категория:Примеры кода 1С]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Некоторые реализации:&lt;br /&gt;
==Хэш строки==&lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;&lt;br /&gt;
Функция стрПолучитьХэш(Знач стрСтрока) Экспорт&lt;br /&gt;
	Сумма1 = 0;&lt;br /&gt;
	Сумма2 = 1;&lt;br /&gt;
	ДлинаСтроки = СтрДлина(стрСтрока);&lt;br /&gt;
	Для ъ = 1 По ДлинаСтроки Цикл&lt;br /&gt;
		//КодСимвола = КодСимвола(стрСтрока, ДлинаСтроки);&lt;br /&gt;
		КодСимвола = КодСимвола(Сред(стрСтрока, ДлинаСтроки, 1));&lt;br /&gt;
		Сумма1 = Сумма1+КодСимвола*ДлинаСтроки;&lt;br /&gt;
		Сумма2 = Сумма2*КодСимвола;&lt;br /&gt;
		ДлинаСтроки = ДлинаСтроки-1;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
	ПростоеЧисло = 165684646484683;&lt;br /&gt;
	Если Сумма1 = 0 Тогда Сумма1 = ПростоеЧисло; КонецЕсли;&lt;br /&gt;
	КодСимвола = Сумма1*Сумма2*ПростоеЧисло;&lt;br /&gt;
	Возврат Лев(Формат(КодСимвола,&amp;quot;ЧГ = &amp;quot;), 32);&lt;br /&gt;
КонецФункции&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Хэш md5==&lt;br /&gt;
Источник: http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&amp;amp;lid=5287&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;&lt;br /&gt;
// Обработка рассчитывает Хэш код текста по алгоритму MD5&lt;br /&gt;
// Весь алгоритм реализован на языке 1С и не требует никаких дополнительных внешних компонент.&lt;br /&gt;
// Можно вводить текст интерактивно или передавать из другой обработки&lt;br /&gt;
//&lt;br /&gt;
// При запуске из другой обработки передается СписокЗначений с параметрами:&lt;br /&gt;
//				&amp;quot;Строка&amp;quot;-собственно строка текста или объект типа &amp;quot;Текст&amp;quot;&lt;br /&gt;
// Возврат		&amp;quot;ХэшКод&amp;quot;-собственно 32 символа Хэш кода&lt;br /&gt;
//&lt;br /&gt;
//      Текст можно передавать поблочно&lt;br /&gt;
//		При передаче текста по блокам &lt;br /&gt;
//		ДЛИНА БЛОКА, КРОМЕ ПОСЛЕДНЕГО, ДОЛЖНА БЫТЬ КРАТНА 64 БАЙТАМ!&lt;br /&gt;
//		дополнительно задаются&lt;br /&gt;
//				&amp;quot;Длина&amp;quot; - равна -1(минус 1) для всех блоков кроме последнего&lt;br /&gt;
//						  для последнего блока длина всего текста в байтах&lt;br /&gt;
//	            &amp;quot;ХэшКод&amp;quot; - Хэш код предыдущего блока (для первого блока не задается)&lt;br /&gt;
//&lt;br /&gt;
Перем A,B,C,D; // Составляющие ХэшКода (по 4 байта или 8 символов в 16с/с) &lt;br /&gt;
Перем A_[32],B_[32],C_[32],D_[32];&lt;br /&gt;
Перем EAX[32],EBX[32],ECX[32],EDX[32]; // Регистры&lt;br /&gt;
Перем S11,S12,S13,S14,S21,S22,S23,S24,S31,S32,S33,S34,S41,S42,S43,S44;&lt;br /&gt;
Перем M[64];&lt;br /&gt;
Перем Степень[32];&lt;br /&gt;
Перем Stepen31; //2 в степени 31&lt;br /&gt;
Перем Stepen32; //2 в степени 32&lt;br /&gt;
Перем X[16];    //Текстовый массив в числовом коде&lt;br /&gt;
//Перем Степень[32]; // Массив степеней&lt;br /&gt;
Процедура Расчет(Стр,Длина=0) Далее&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура _XOR(П1[],П2[],Итог[])&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		Если П1[инд] &amp;lt;&amp;gt; П2[инд] Тогда&lt;br /&gt;
			Итог[инд]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			Итог[инд]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура _AND(П1[],П2[],Итог[])&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		Если (П1[инд]=1) И (П2[инд]=1) Тогда&lt;br /&gt;
			Итог[инд]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			Итог[инд]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура _OR(П1[],П2[],Итог[])&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		Если (П1[инд]=1) ИЛИ (П2[инд]=1) Тогда&lt;br /&gt;
			Итог[инд]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			Итог[инд]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура _ADD(П1[],П2[],Итог[])&lt;br /&gt;
	Добавка=0;&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		Итог[инд]=П1[инд]+П2[инд]+Добавка;&lt;br /&gt;
		Если Итог[инд]=2 Тогда&lt;br /&gt;
			Итог[инд]=0;&lt;br /&gt;
			Добавка=1;&lt;br /&gt;
		ИначеЕсли Итог[инд]=3 Тогда&lt;br /&gt;
			Итог[инд]=1;&lt;br /&gt;
			Добавка=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			Добавка=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура _NOT(П1[],Итог[])&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		Если П1[инд]=0 Тогда&lt;br /&gt;
			Итог[инд]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			Итог[инд]=0;	&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура _ROL(П1[],П2,Итог[])&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		инд1=инд+П2;&lt;br /&gt;
		Если инд1 &amp;gt; 32 Тогда&lt;br /&gt;
			инд1=инд1-32;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		Итог[инд1]=П1[инд];&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура FF(a[],b[],c[],d[],X,s,t)&lt;br /&gt;
	_and(b,c,EAX);&lt;br /&gt;
	_not(b,EBX);&lt;br /&gt;
	_and(EBX,d,ECX);&lt;br /&gt;
	_or(EAX,ECX,EBX);&lt;br /&gt;
	&lt;br /&gt;
	X1=X+t;&lt;br /&gt;
	Если X1 &amp;gt;= Stepen32 Тогда&lt;br /&gt;
		X1=X1-Stepen32;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		инд1=32-инд+1;&lt;br /&gt;
		Степ=Степень[инд1];&lt;br /&gt;
		Если X1 &amp;gt;= Степ Тогда&lt;br /&gt;
			X1=X1-Степ;&lt;br /&gt;
			EDX[инд1]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			EDX[инд1]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
	_ADD(EBX,a,ECX);&lt;br /&gt;
	_ADD(ECX,EDX,EAX);&lt;br /&gt;
	&lt;br /&gt;
	_rol(EAX,s,ECX);&lt;br /&gt;
	_ADD(ECX,b,a);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура GG(a[],b[],c[],d[],X,s,t)&lt;br /&gt;
	_and(b,d,EAX);&lt;br /&gt;
	_not(d,EDX);&lt;br /&gt;
	_and(EDX,c,ECX);&lt;br /&gt;
	_or(EAX,ECX,EBX);&lt;br /&gt;
	&lt;br /&gt;
	X1=X+t;&lt;br /&gt;
	Если X1 &amp;gt;= Stepen32 Тогда&lt;br /&gt;
		X1=X1-Stepen32;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		инд1=32-инд+1;&lt;br /&gt;
		Степ=Степень[инд1];&lt;br /&gt;
		Если X1 &amp;gt;= Степ Тогда&lt;br /&gt;
			X1=X1-Степ;&lt;br /&gt;
			EDX[инд1]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			EDX[инд1]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
	_ADD(EBX,a,ECX);&lt;br /&gt;
	_ADD(ECX,EDX,EAX);&lt;br /&gt;
	&lt;br /&gt;
	_rol(EAX,s,ECX);&lt;br /&gt;
	_ADD(ECX,b,a);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура HH(a[],b[],c[],d[],X,s,t)&lt;br /&gt;
	_xor(b,c,EAX);&lt;br /&gt;
	_xor(EAX,d,EBX);&lt;br /&gt;
	&lt;br /&gt;
	X1=X+t;&lt;br /&gt;
	Если X1 &amp;gt;= Stepen32 Тогда&lt;br /&gt;
		X1=X1-Stepen32;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		инд1=32-инд+1;&lt;br /&gt;
		Степ=Степень[инд1];&lt;br /&gt;
		Если X1 &amp;gt;= Степ Тогда&lt;br /&gt;
			X1=X1-Степ;&lt;br /&gt;
			EDX[инд1]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			EDX[инд1]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
	_ADD(EBX,a,ECX);&lt;br /&gt;
	_ADD(ECX,EDX,EAX);&lt;br /&gt;
	_rol(EAX,s,ECX);&lt;br /&gt;
	_ADD(ECX,b,a);&lt;br /&gt;
	&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура II(a[],b[],c[],d[],X,s,t)&lt;br /&gt;
	_not(d,EAX);&lt;br /&gt;
	_or(EAX,b,ECX);&lt;br /&gt;
	_xor(ECX,c,EBX);&lt;br /&gt;
	&lt;br /&gt;
	X1=X+t;&lt;br /&gt;
	Если X1 &amp;gt;= Stepen32 Тогда&lt;br /&gt;
		X1=X1-Stepen32;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	Для инд=1 По 32 Цикл&lt;br /&gt;
		инд1=32-инд+1;&lt;br /&gt;
		Степ=Степень[инд1];&lt;br /&gt;
		Если X1 &amp;gt;= Степ Тогда&lt;br /&gt;
			X1=X1-Степ;&lt;br /&gt;
			EDX[инд1]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			EDX[инд1]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
	_ADD(EBX,a,ECX);&lt;br /&gt;
	_ADD(ECX,EDX,EAX);&lt;br /&gt;
	_rol(EAX,s,ECX);&lt;br /&gt;
	_ADD(ECX,b,a);&lt;br /&gt;
	&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//******************************************************************************&lt;br /&gt;
Функция Из_16_В_Число(Знач Значение)&lt;br /&gt;
    Результат=0;&lt;br /&gt;
	Значение=ВРег(Значение);&lt;br /&gt;
	М=1;&lt;br /&gt;
    Для Х=1 По 4 Цикл&lt;br /&gt;
    	Результат=Результат+(Найти(&amp;quot;0123456789ABCDEF&amp;quot;,Сред(Значение,2*Х,1))-1)*М;&lt;br /&gt;
		М=М*16;&lt;br /&gt;
    	Результат=Результат+(Найти(&amp;quot;0123456789ABCDEF&amp;quot;,Сред(Значение,2*Х-1,1))-1)*М;&lt;br /&gt;
		М=М*16;&lt;br /&gt;
    КонецЦикла;&lt;br /&gt;
    Возврат Результат;&lt;br /&gt;
КонецФункции&lt;br /&gt;
//*******************************************&lt;br /&gt;
Функция Из_Число_В_16(Знач Значение)&lt;br /&gt;
	Результат=&amp;quot;&amp;quot;;&lt;br /&gt;
	Для инд=1 По 4 Цикл&lt;br /&gt;
		Остат=Значение%16+1;&lt;br /&gt;
		Результат1=Сред(&amp;quot;0123456789ABCDEF&amp;quot;,Остат,1);&lt;br /&gt;
		Значение=Цел(Значение/16);&lt;br /&gt;
		Остат=Значение%16+1;&lt;br /&gt;
		Результат2=Сред(&amp;quot;0123456789ABCDEF&amp;quot;,Остат,1);&lt;br /&gt;
		Значение=Цел(Значение/16);&lt;br /&gt;
		Результат=Результат+Результат2+Результат1;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
    Возврат Результат;&lt;br /&gt;
КонецФункции&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура MD5Hash()&lt;br /&gt;
Перем A1[32],B1[32],C1[32],D1[32];&lt;br /&gt;
	Для i=1 По 32 Цикл&lt;br /&gt;
		A1[i]	=	A_[i];&lt;br /&gt;
		B1[i]	=	B_[i];&lt;br /&gt;
		C1[i]	=	C_[i];&lt;br /&gt;
		D1[i]	=	D_[i];&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
	&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
// Round 1.&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
                        FF      (a_,b_,c_,d_, X[1], S11, 3614090360)  ;// Step 1&lt;br /&gt;
                        FF      (d_,a_,b_,c_, X[2], S12, 3905402710)  ;// Step 2&lt;br /&gt;
                        FF      (c_,d_,a_,b_, X[3], S13,  606105819)  ;// Step 3&lt;br /&gt;
                        FF      (b_,c_,d_,a_, X[4], S14, 3250441966)  ;// Step 4&lt;br /&gt;
                        FF      (a_,b_,c_,d_, X[5], S11, 4118548399)  ;// Step 5&lt;br /&gt;
                        FF      (d_,a_,b_,c_, X[6], S12, 1200080426)  ;// Step 6&lt;br /&gt;
                        FF      (c_,d_,a_,b_, X[7], S13, 2821735955)  ;// Step 7&lt;br /&gt;
                        FF      (b_,c_,d_,a_, X[8], S14, 4249261313)  ;// Step 8&lt;br /&gt;
                        FF      (a_,b_,c_,d_, X[9], S11, 1770035416)  ;// Step 9&lt;br /&gt;
                        FF      (d_,a_,b_,c_, X[10],S12, 2336552879)  ;// Step 10&lt;br /&gt;
                        FF      (c_,d_,a_,b_, X[11],S13, 4294925233)  ;// Step 11&lt;br /&gt;
                        FF      (b_,c_,d_,a_, X[12],S14, 2304563134)  ;// Step 12&lt;br /&gt;
                        FF      (a_,b_,c_,d_, X[13],S11, 1804603682)  ;// Step 13&lt;br /&gt;
                        FF      (d_,a_,b_,c_, X[14],S12, 4254626195)  ;// Step 14&lt;br /&gt;
                        FF      (c_,d_,a_,b_, X[15],S13, 2792965006)  ;// Step 15&lt;br /&gt;
                        FF      (b_,c_,d_,a_, X[16],S14, 1236535329)  ;// Step 16&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
// Round 2.&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
                        GG      (a_,b_,c_,d_, X[2], S21, 4129170786)  ;// Step 17&lt;br /&gt;
                        GG      (d_,a_,b_,c_, X[7], S22, 3225465664)  ;// Step 18&lt;br /&gt;
                        GG      (c_,d_,a_,b_, X[12],S23,  643717713)  ;// Step 19&lt;br /&gt;
                        GG      (b_,c_,d_,a_, X[1], S24, 3921069994)  ;// Step 20&lt;br /&gt;
                        GG      (a_,b_,c_,d_, X[6], S21, 3593408605)  ;// Step 21&lt;br /&gt;
                        GG      (d_,a_,b_,c_, X[11],S22,   38016083)  ;// Step 22 &lt;br /&gt;
                        GG      (c_,d_,a_,b_, X[16],S23, 3634488961)  ;// Step 23&lt;br /&gt;
                        GG      (b_,c_,d_,a_, X[5], S24, 3889429448)  ;// Step 24&lt;br /&gt;
                        GG      (a_,b_,c_,d_, X[10],S21,  568446438)  ;// Step 25&lt;br /&gt;
                        GG      (d_,a_,b_,c_, X[15],S22, 3275163606)  ;// Step 26&lt;br /&gt;
                        GG      (c_,d_,a_,b_, X[4], S23, 4107603335)  ;// Step 27&lt;br /&gt;
                        GG      (b_,c_,d_,a_, X[9], S24, 1163531501)  ;// Step 28&lt;br /&gt;
                        GG      (a_,b_,c_,d_, X[14],S21, 2850285829)  ;// Step 29&lt;br /&gt;
                        GG      (d_,a_,b_,c_, X[3], S22, 4243563512)  ;// Step 30&lt;br /&gt;
                        GG      (c_,d_,a_,b_, X[8], S23, 1735328473)  ;// Step 31&lt;br /&gt;
                        GG      (b_,c_,d_,a_, X[13],S24, 2368359562)  ;// Step 32&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
// Round 3.&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
                        HH      (a_,b_,c_,d_, X[6], S31, 4294588738)  ;// Step 33&lt;br /&gt;
                        HH      (d_,a_,b_,c_, X[9], S32, 2272392833)  ;// Step 34&lt;br /&gt;
                        HH      (c_,d_,a_,b_, X[12],S33, 1839030562)  ;// Step 35&lt;br /&gt;
                        HH      (b_,c_,d_,a_, X[15],S34, 4259657740)  ;// Step 36&lt;br /&gt;
                        HH      (a_,b_,c_,d_, X[2], S31, 2763975236)  ;// Step 37&lt;br /&gt;
                        HH      (d_,a_,b_,c_, X[5], S32, 1272893353)  ;// Step 38&lt;br /&gt;
                        HH      (c_,d_,a_,b_, X[8], S33, 4139469664)  ;// Step 39&lt;br /&gt;
                        HH      (b_,c_,d_,a_, X[11],S34, 3200236656)  ;// Step 40&lt;br /&gt;
                        HH      (a_,b_,c_,d_, X[14],S31,  681279174)  ;// Step 41&lt;br /&gt;
                        HH      (d_,a_,b_,c_, X[1], S32, 3936430074)  ;// Step 42&lt;br /&gt;
                        HH      (c_,d_,a_,b_, X[4], S33, 3572445317)  ;// Step 43&lt;br /&gt;
                        HH      (b_,c_,d_,a_, X[7], S34,   76029189)  ;// Step 44&lt;br /&gt;
                        HH      (a_,b_,c_,d_, X[10],S31, 3654602809)  ;// Step 45&lt;br /&gt;
                        HH      (d_,a_,b_,c_, X[13],S32, 3873151461)  ;// Step 46&lt;br /&gt;
                        HH      (c_,d_,a_,b_, X[16],S33,  530742520)  ;// Step 47&lt;br /&gt;
                        HH      (b_,c_,d_,a_, X[3], S34, 3299628645)  ;// Step 48&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
// Round 4.&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
                        II      (a_,b_,c_,d_, X[1], S41, 4096336452)  ;// Step 49&lt;br /&gt;
                        II      (d_,a_,b_,c_, X[8], S42, 1126891415)  ;// Step 50&lt;br /&gt;
                        II      (c_,d_,a_,b_, X[15],S43, 2878612391)  ;// Step 51&lt;br /&gt;
                        II      (b_,c_,d_,a_, X[6], S44, 4237533241)  ;// Step 52&lt;br /&gt;
                        II      (a_,b_,c_,d_, X[13],S41, 1700485571)  ;// Step 53&lt;br /&gt;
                        II      (d_,a_,b_,c_, X[4], S42, 2399980690)  ;// Step 54&lt;br /&gt;
                        II      (c_,d_,a_,b_, X[11],S43, 4293915773)  ;// Step 55&lt;br /&gt;
                        II      (b_,c_,d_,a_, X[2], S44, 2240044497)  ;// Step 56&lt;br /&gt;
                        II      (a_,b_,c_,d_, X[9], S41, 1873313359)  ;// Step 57&lt;br /&gt;
                        II      (d_,a_,b_,c_, X[16],S42, 4264355552)  ;// Step 58&lt;br /&gt;
                        II      (c_,d_,a_,b_, X[7], S43, 2734768916)  ;// Step 59&lt;br /&gt;
                        II      (b_,c_,d_,a_, X[14],S44, 1309151649)  ;// Step 60&lt;br /&gt;
                        II      (a_,b_,c_,d_, X[5], S41, 4149444226)  ;// Step 61&lt;br /&gt;
                        II      (d_,a_,b_,c_, X[12],S42, 3174756917)  ;// Step 62&lt;br /&gt;
                        II      (c_,d_,a_,b_, X[3], S43,  718787259)  ;// Step 63&lt;br /&gt;
                        II      (b_,c_,d_,a_, X[10],S44, 3951481745)  ;// Step 64&lt;br /&gt;
// --------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
	_ADD(A_,A1,A_);&lt;br /&gt;
	_ADD(B_,B1,B_);&lt;br /&gt;
	_ADD(C_,C1,C_);&lt;br /&gt;
	_ADD(D_,D1,D_);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура ПриОткрытии()&lt;br /&gt;
	Если ТипЗначенияСтр(Форма.Параметр)=&amp;quot;СписокЗначений&amp;quot; Тогда&lt;br /&gt;
		СтатусВозврата(0);&lt;br /&gt;
		Стр=Форма.Параметр.Получить(&amp;quot;Строка&amp;quot;);&lt;br /&gt;
		Если ПустоеЗначение(Форма.Параметр.Получить(&amp;quot;ХэшКод&amp;quot;)) &amp;lt;&amp;gt; 1 Тогда&lt;br /&gt;
			Код=Форма.Параметр.Получить(&amp;quot;ХэшКод&amp;quot;);&lt;br /&gt;
			A	=	Из_16_В_Число(Лев(Код,8));&lt;br /&gt;
			B	=	Из_16_В_Число(Сред(Код,9,8));&lt;br /&gt;
			C	=	Из_16_В_Число(Сред(Код,17,8));&lt;br /&gt;
			D	=	Из_16_В_Число(Прав(Код,8));&lt;br /&gt;
		Иначе&lt;br /&gt;
			A	=	1732584193;&lt;br /&gt;
			B	=	4023233417;&lt;br /&gt;
			C	=	2562383102;&lt;br /&gt;
			D	=	271733878;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		Длина=Число(Форма.Параметр.Получить(&amp;quot;Длина&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
		Для i=1 По 32 Цикл&lt;br /&gt;
			i1=32-i+1;&lt;br /&gt;
			Степ=Степень[i1];&lt;br /&gt;
			Если A &amp;gt;= Степ Тогда&lt;br /&gt;
				A=A-Степ;&lt;br /&gt;
				A_[i1]=1;&lt;br /&gt;
			Иначе&lt;br /&gt;
				A_[i1]=0;&lt;br /&gt;
			КонецЕсли;&lt;br /&gt;
			Если B &amp;gt;= Степ Тогда&lt;br /&gt;
				B=B-Степ;&lt;br /&gt;
				B_[i1]=1;&lt;br /&gt;
			Иначе&lt;br /&gt;
				B_[i1]=0;&lt;br /&gt;
			КонецЕсли;&lt;br /&gt;
			Если C &amp;gt;= Степ Тогда&lt;br /&gt;
				C=C-Степ;&lt;br /&gt;
				C_[i1]=1;&lt;br /&gt;
			Иначе&lt;br /&gt;
				C_[i1]=0;&lt;br /&gt;
			КонецЕсли;&lt;br /&gt;
			Если D &amp;gt;= Степ Тогда&lt;br /&gt;
				D=D-Степ;&lt;br /&gt;
				D_[i1]=1;&lt;br /&gt;
			Иначе&lt;br /&gt;
				D_[i1]=0;&lt;br /&gt;
			КонецЕсли;&lt;br /&gt;
		КонецЦикла;&lt;br /&gt;
&lt;br /&gt;
		Если ТипЗначенияСтр(Стр)=&amp;quot;Текст&amp;quot; Тогда&lt;br /&gt;
			Текст=Стр;&lt;br /&gt;
			Стр=&amp;quot;&amp;quot;;&lt;br /&gt;
			Длина=0;&lt;br /&gt;
			Для инд=1 По Текст.КоличествоСтрок() Цикл&lt;br /&gt;
				Стр1=Текст.ПолучитьСтроку(инд);&lt;br /&gt;
				Стр=Стр+Стр1;&lt;br /&gt;
				Пока СтрДлина(Стр) &amp;gt;= 8192 Цикл&lt;br /&gt;
					Расчет(Лев(Стр,8192),-1);&lt;br /&gt;
					Длина=Длина+8192;&lt;br /&gt;
					Стр=Сред(Стр,8193);&lt;br /&gt;
				КонецЦикла;&lt;br /&gt;
			КонецЦикла;&lt;br /&gt;
			Длина=Длина+СтрДлина(Стр);&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		&lt;br /&gt;
		Расчет(Стр,Длина);&lt;br /&gt;
		&lt;br /&gt;
		A	=	0;&lt;br /&gt;
		B	=	0;&lt;br /&gt;
		C	=	0;&lt;br /&gt;
		D	=	0;&lt;br /&gt;
		Для i=1 По 32 Цикл&lt;br /&gt;
			Степ=Степень[i];&lt;br /&gt;
			Если A_[i]=1 Тогда&lt;br /&gt;
				A=A+Степ;	&lt;br /&gt;
			КонецЕсли;&lt;br /&gt;
			Если B_[i]=1 Тогда&lt;br /&gt;
				B=B+Степ;	&lt;br /&gt;
			КонецЕсли;&lt;br /&gt;
			Если C_[i]=1 Тогда&lt;br /&gt;
				C=C+Степ;	&lt;br /&gt;
			КонецЕсли;&lt;br /&gt;
			Если D_[i]=1 Тогда&lt;br /&gt;
				D=D+Степ;	&lt;br /&gt;
			КонецЕсли;&lt;br /&gt;
		КонецЦикла;&lt;br /&gt;
		&lt;br /&gt;
		ХэшКод=Из_Число_В_16(A)+Из_Число_В_16(B)+Из_Число_В_16(C)+Из_Число_В_16(D);&lt;br /&gt;
		Форма.Параметр.Установить(&amp;quot;ХэшКод&amp;quot;,ХэшКод);&lt;br /&gt;
		Возврат;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура Расчет(Стр,Длина=0)&lt;br /&gt;
	Перем Мас[64];&lt;br /&gt;
	&lt;br /&gt;
	Если Длина=0 Тогда&lt;br /&gt;
		Длина=СтрДлина(Стр);&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	&lt;br /&gt;
	// Определение Хэш кодов 64 байтных блоков&lt;br /&gt;
	ДлСтр=СтрДлина(Стр);&lt;br /&gt;
	Пока ДлСтр &amp;gt;= 64 Цикл&lt;br /&gt;
		i1=0;&lt;br /&gt;
		Для i = 1 По 16 Цикл&lt;br /&gt;
			X[i]=КодСимв(Сред(Стр,i1+1,1))+&lt;br /&gt;
			КодСимв(Сред(Стр,i1+2,1))*256+&lt;br /&gt;
			КодСимв(Сред(Стр,i1+3,1))*65536+&lt;br /&gt;
			КодСимв(Сред(Стр,i1+4,1))*16777216;&lt;br /&gt;
			i1=i1+4;&lt;br /&gt;
		КонецЦикла;&lt;br /&gt;
		MD5Hash();&lt;br /&gt;
		Стр=Сред(Стр,65);&lt;br /&gt;
		ДлСтр=СтрДлина(Стр);&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
	&lt;br /&gt;
	// Финал - определение Хэш кода последнего блока&lt;br /&gt;
	Если Длина &amp;lt;&amp;gt; -1 Тогда  // Если Длина=-1 то значит это не последний блок&lt;br /&gt;
		ДлинаБит=Длина*8;&lt;br /&gt;
		Для i = 1 По ДлСтр Цикл &lt;br /&gt;
			Мас[i]=КодСимв(Сред(Стр,i,1));&lt;br /&gt;
		КонецЦикла;&lt;br /&gt;
		Мас[ДлСтр+1]=128;&lt;br /&gt;
		Длина=ДлСтр+1;&lt;br /&gt;
		&lt;br /&gt;
		// В последнем блоке нет свободных 8 байт для длины&lt;br /&gt;
		// Дополняем блок до 64 байт&lt;br /&gt;
		Если Длина &amp;gt; 56 Тогда&lt;br /&gt;
			Для i = Длина+1 По 64 Цикл&lt;br /&gt;
				Мас[i]=0;&lt;br /&gt;
			КонецЦикла; &lt;br /&gt;
			i1=0;&lt;br /&gt;
			Для i = 1 По 16 Цикл&lt;br /&gt;
				X[i]=Мас[i1+1]+&lt;br /&gt;
				Мас[i1+2]*256+&lt;br /&gt;
				Мас[i1+3]*65536+&lt;br /&gt;
				Мас[i1+4]*16777216;&lt;br /&gt;
				i1=i1+4;&lt;br /&gt;
			КонецЦикла;&lt;br /&gt;
			MD5Hash();&lt;br /&gt;
			Длина=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		&lt;br /&gt;
		// Дополняем блок до 56 байт и заносим длину в битах&lt;br /&gt;
		Для i = Длина+1 По 56 Цикл&lt;br /&gt;
			Мас[i]=0;&lt;br /&gt;
		КонецЦикла;&lt;br /&gt;
		i1=0;&lt;br /&gt;
		Для i = 1 По 14 Цикл&lt;br /&gt;
			X[i]=Мас[i1+1]+&lt;br /&gt;
			Мас[i1+2]*256+&lt;br /&gt;
			Мас[i1+3]*65536+&lt;br /&gt;
			Мас[i1+4]*16777216;&lt;br /&gt;
			i1=i1+4;&lt;br /&gt;
		КонецЦикла;&lt;br /&gt;
		X[15]=ДлинаБит%Stepen32;&lt;br /&gt;
		X[16]=Цел(ДлинаБит/Stepen32);&lt;br /&gt;
		MD5Hash();&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
Процедура Сформировать()&lt;br /&gt;
	A	=	1732584193;&lt;br /&gt;
	B	=	4023233417;&lt;br /&gt;
	C	=	2562383102;&lt;br /&gt;
	D	=	271733878;&lt;br /&gt;
	Для i=1 По 32 Цикл&lt;br /&gt;
		i1=32-i+1;&lt;br /&gt;
		Степ=Степень[i1];&lt;br /&gt;
		Если A &amp;gt;= Степ Тогда&lt;br /&gt;
			A=A-Степ;&lt;br /&gt;
			A_[i1]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			A_[i1]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		Если B &amp;gt;= Степ Тогда&lt;br /&gt;
			B=B-Степ;&lt;br /&gt;
			B_[i1]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			B_[i1]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		Если C &amp;gt;= Степ Тогда&lt;br /&gt;
			C=C-Степ;&lt;br /&gt;
			C_[i1]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			C_[i1]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		Если D &amp;gt;= Степ Тогда&lt;br /&gt;
			D=D-Степ;&lt;br /&gt;
			D_[i1]=1;&lt;br /&gt;
		Иначе&lt;br /&gt;
			D_[i1]=0;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
	Расчет(СтрокаХэш);&lt;br /&gt;
	&lt;br /&gt;
	A	=	0;&lt;br /&gt;
	B	=	0;&lt;br /&gt;
	C	=	0;&lt;br /&gt;
	D	=	0;&lt;br /&gt;
	Для i=1 По 32 Цикл&lt;br /&gt;
		Степ=Степень[i];&lt;br /&gt;
		Если A_[i]=1 Тогда&lt;br /&gt;
			A=A+Степ;	&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		Если B_[i]=1 Тогда&lt;br /&gt;
			B=B+Степ;	&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		Если C_[i]=1 Тогда&lt;br /&gt;
			C=C+Степ;	&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
		Если D_[i]=1 Тогда&lt;br /&gt;
			D=D+Степ;	&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЦикла;&lt;br /&gt;
		&lt;br /&gt;
	ХэшКод=Из_Число_В_16(A)+Из_Число_В_16(B)+Из_Число_В_16(C)+Из_Число_В_16(D);&lt;br /&gt;
	Форма.ХэшКод.Заголовок(ХэшКод);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
//*******************************************&lt;br /&gt;
S11 =  7;&lt;br /&gt;
S12 = 12;&lt;br /&gt;
S13 = 17;&lt;br /&gt;
S14 = 22;&lt;br /&gt;
S21 =  5;&lt;br /&gt;
S22 =  9;&lt;br /&gt;
S23 = 14;&lt;br /&gt;
S24 = 20;&lt;br /&gt;
S31 =  4;&lt;br /&gt;
S32 = 11;&lt;br /&gt;
S33 = 16;&lt;br /&gt;
S34 = 23;&lt;br /&gt;
S41 =  6;&lt;br /&gt;
S42 = 10;&lt;br /&gt;
S43 = 15;&lt;br /&gt;
S44 = 21;&lt;br /&gt;
&lt;br /&gt;
Степень[1]=1;&lt;br /&gt;
Для инд=2 По 32 Цикл&lt;br /&gt;
	Степень[инд]=Степень[инд-1]*2;&lt;br /&gt;
КонецЦикла;&lt;br /&gt;
Stepen31=Степень[32];&lt;br /&gt;
Stepen32=Stepen31*2;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Хэш через объект capicom==&lt;br /&gt;
&lt;br /&gt;
* http://www.infostart.ru/projects/2964/&lt;br /&gt;
* Описание capicom: http://msdn.microsoft.com/en-us/library/aa380255(VS.85).aspx  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;&lt;br /&gt;
objHashedData = Новый COMОбъект(&amp;quot;CAPICOM.HashedData&amp;quot;);&lt;br /&gt;
objHashedData.Algorithm = 3;&lt;br /&gt;
objHashedData.Hash(НужнаяСтрока);&lt;br /&gt;
Сообщить(objHashedData.Value);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Павел Лазарев</name></author>
		
	</entry>
</feed>