О ВНЕСЕНИИ ИЗМЕНЕНИЙ И ДОПОЛНЕНИЙ В ПРИКАЗ ФОМС ОТ 30.12.2004 N 91 "ОБ ОРГАНИЗАЦИИ ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ ПО ОБЕСПЕЧЕНИЮ НЕОБХОДИМЫМИ ЛЕКАРСТВЕННЫМИ СРЕДСТВАМИ ОТДЕЛЬНЫХ КАТЕГОРИЙ ГРАЖДАН" (В РЕДАКЦИИ ПРИКАЗОВ ФОМС ОТ 24.05.2005 N 51, ОТ 02.08. Приказ. Федеральный фонд обязательного медицинского страхования. 21.03.06 38

Фрагмент документа "О ВНЕСЕНИИ ИЗМЕНЕНИЙ И ДОПОЛНЕНИЙ В ПРИКАЗ ФОМС ОТ 30.12.2004 N 91 "ОБ ОРГАНИЗАЦИИ ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ ПО ОБЕСПЕЧЕНИЮ НЕОБХОДИМЫМИ ЛЕКАРСТВЕННЫМИ СРЕДСТВАМИ ОТДЕЛЬНЫХ КАТЕГОРИЙ ГРАЖДАН" (В РЕДАКЦИИ ПРИКАЗОВ ФОМС ОТ 24.05.2005 N 51, ОТ 02.08".

Предыдущий фрагмент <<< ...  Оглавление  ... >>> Следующий фрагмент

Полный текст документа

Для  расчета  контрольной  суммы  по  XML-файлу выделяется строка
символов  между  правой угловой скобкой открывающего тега < MAIN > (не
включая  ее)  и  заканчивающаяся  и левой угловой скобкой закрывающего
тега </ MAIN > (не включая ее).
     Символы  пробелов,  табуляции, возврата каретки и перевода строки
не   сохраняются   в  полученной  строке  и  не  участвуют  в  расчете
контрольной суммы.
     Далее   по  этой  строке  ведется  подсчет  контрольной  суммы  в
соответствии   с   алгоритмом,   указанным  в  пункте  8.1  настоящего
документа.
     Полученное значение заносится в атрибут chsm.

               8.1. Алгоритм расчета контрольной суммы
                          по строке символов

     В  расчете  контрольной  суммы  по  выделенной строке применяется
алгоритм  Secure  Hash  Algorithm (SHA) стандарта Secure Hash Standard
(SHS).
     Алгоритм   SHA  (Secure  Hash  Algorithm)  стандарта  безопасного
хеширования (Secure Hash Standard, SHS).
     В  зависимости  от выходного хеш-значения выделяют следующие виды
SHA:
     SHA1 - выходное значение 160 бит;
     SHA256 - выходное значение 256 бит;
     SHA512 - выходное значение 512 бит;
     SHA384 - выходное значение 384 бита.
     Стандарт ИСО - ISO/IEC 10118-3:2004
     (http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?
CSNUMBER=39876).
     Настоящий документ описывает стандарт SHA1.
     Описание реализации алгоритма SHA1 на языке C++:
     typedef int HASH[5];
     typedef int T512[16];
     typedef int T80[80];
     typedef int (*LPFNHASH)(int, int, int);// Функции F1, F2, F3
     const int K1 = 0x5a827999;
     const int K2 = 0x6ed9eba1;
     const int К3 = 0x8f1bbcdc;
     const int K4 = 0xca62c1d6;

     unsigned ROL(unsigned a, size_t s) { return a << s | (a >> (sizeof
     (T)*8 - s)); }
     int f1(int x, int y, int z) { return x&y | (~x)&z; }
                                           /\ /     int f2(int x, int y, int z) { return x  y  z; }
     int f3(int x, int y, int z) { return x&y | x&z | y&z; }
     void FillT80(T512 M, T80 W)
     {
         size_t t;
         for(t = 0; t < 16; t++)W[t] = M[t];
                                        /\      /\       /     for(; t < 80; t++)W[t] = ROL(W[t-3]  W[t-8]  W[t-14]  W[t-16], 1);
     }
     void MainStep(T80 W, size_t t, HASH H, LPFNHASH f, int K)
     {
     int tmp = ROL(H[0], 5) + f(H[1], H[2], H[3]) + H[4] + W[t] + K;
         H[4] = H[3];
         H[3] = H[2];
         H[2] = R0L(H[1], 30);
         H[1] = H[0];
         H[0] = tmp;
     }
     void StepSHA(T512 M, HASH Hr)
     {
         T80 W;
         FillT80(M, W);
         size_t t;
         HASH H;
         memcpy(H, Hr, sizeof(HASH));
         for(t = 0; t < 20; t++) MainStep(W, t, H, f1, K1);
         for(; t < 40; t++) MainStep(W, t, H, f2, K2);
         for(; t < 60; t++) MainStep(W, t, H, f3, К3);
         for(; t < 80; t++) MainStep(W, t, H, f2, K4);
             for(size_t i = 0; i < 5; i++)
                 Hr [i] += H[i];
     }
     Функции F1, F2, F3:
     F1(X,Y,Z) = (X \/ Y) \/ ((-|X) /\ Z)
F2(X,Y,Z) = X (+) Y (+) Z
F3(X,Y,Z) = (X /\ Y) \/ (X /\ Z) \/ (Y /\ Z)
ROL(X,Y) - циклический сдвиг Х влево на Y разрядов,
где:
/\ - логическое "И";
\/ - логическое "Или";
    -+ - логическое "Не";
    (+) - логическое "Исключающее или".
     Перед  запуском  алгоритма хеш-значение должно инициализироваться
следующими константами:
     const  HASH  HASHFIRST  =  {0x67452301,  0xefcdab89,  0x98badcfe,
0x10325476, 0xc3d2e1f0};
     Замечание: тип int хранит байты в обратном порядке. В приведенном
примере  минимальной  единицей памяти является 32-битный блок, поэтому
способ хранения на диске неважен. При побайтовой обработке это следует
учитывать.


                                                      Приложение N 3.3

                                          к Методическим рекомендациям
                                        по организации информационного
                                      взаимодействия между участниками
                                  лекарственного обеспечения отдельных
                                    категорий граждан при обязательном
                                               медицинском страховании
                                        (с изменениями и дополнениями)
                                                 от 21 марта 2006 года

               СПЕЦИФИКАЦИЯ ПРОТОКОЛА ЭКСПОРТА-ИМПОРТА
      НОРМАТИВНО-СПРАВОЧНОЙ ИНФОРМАЦИИ И РЕГИОНАЛЬНОГО СЕГМЕНТА
        ФЕДЕРАЛЬНОГО РЕГИСТРА ЛИЦ, ИМЕЮЩИХ ПРАВО НА ПОЛУЧЕНИЕ
                  ГОСУДАРСТВЕННОЙ СОЦИАЛЬНОЙ ПОМОЩИ

Фрагмент документа "О ВНЕСЕНИИ ИЗМЕНЕНИЙ И ДОПОЛНЕНИЙ В ПРИКАЗ ФОМС ОТ 30.12.2004 N 91 "ОБ ОРГАНИЗАЦИИ ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ ПО ОБЕСПЕЧЕНИЮ НЕОБХОДИМЫМИ ЛЕКАРСТВЕННЫМИ СРЕДСТВАМИ ОТДЕЛЬНЫХ КАТЕГОРИЙ ГРАЖДАН" (В РЕДАКЦИИ ПРИКАЗОВ ФОМС ОТ 24.05.2005 N 51, ОТ 02.08".

Предыдущий фрагмент <<< ...  Оглавление  ... >>> Следующий фрагмент

Полный текст документа