перемножение байт из массива и сложение. Что это за алгоритм?

Тема в разделе "WASM.CRYPTO", создана пользователем Aids, 24 июн 2011.

  1. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
  2. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    OLS

    #27 как то не правильно расчитывает последний столбец K1*K^-1=E
    Код (Text):
    1. 01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,D6,
    2. 00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,4E,
    3. 00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,6C,
    4. 00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,DC,
    5. 00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,3D,
    6. 00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,1E,
    7. 00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,E8,
    8. 00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,90,
    9. 00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,72,
    10. 00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,12,
    11. 00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,A8,
    12. 00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,6F,
    13. 00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,AC,
    14. 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,8A,
    15. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,
    16. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,D4,
    17. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,AA,
    18. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,F9,
    19. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0F,
    20. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,75,
    21. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,24,
    22. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,56,
    23. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,DC,
    24. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,51,
    25. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,62,
    26. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14,
    27. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,F3,
    28. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,32,
    29. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,6B,
    30. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,49,
    31. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,B1,
    32. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,C7,
    33. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,E9,
    34. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,C2,
    35. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,F4,
    36. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,AA,
    37. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,BF,
    38. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,B4,
    39. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,23,
    40. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,7A,
    41. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,EE,
    42. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,2A,
    43. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,1B,
    44. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,14,
    45. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,86,
    46. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,F3,
    47. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,4C,
    48. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,4A,
    49. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,2D,
    50. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,6F,
    51. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,8E,
    52. 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
     
  3. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    По-моему, считает то правильно, а вот если на определенном этапе вся строка превратилась в 0, то это признак того, что матрица имеет ранг меньше, чем ее размер.

    Похоже, один из элементов вектора D придется еще и перебором выбирать из условия получения осымысленного текста в целом. Честно признаюсь, об алгоритме Хилла узнал из этой ветки, поэтому это только мои предположения.
     
  4. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    OLS
    Invertible start of row not found
    элемент src[51,51] чётный
     
  5. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Оно не просто четное, а нулевое.
     
  6. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    OLS

    хм. я даже не знаю это плохо или совсем хреного
     
  7. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Задача решена один из возможных ответов K1^-1 [51,51]=0x37
    http://file.qip.ru/file/sZcWLB32/C_online.html

    У обратной матрицы K1^-1 элемент 0<[51,51]<52 может быть любое число
     
  8. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Вот только кейген не решён. входной вектор не состоит из букв и цифр(((
     
  9. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Либо я копаю не там, либо есть ещё решения у системы
     
  10. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    весь последний столбец менять можно ))
     
  11. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    M=(D*K1+K2)*K3 В кейгене вектор D заполнен сначала этими символами
    после ввода значение в поле они перезаписываются в зависимости от лоинны входных символов
    D=Input , где Input это символы введённые в поле. в результате получается как то так
    Для чего этот алфовит? Возможно он связан как то с последним столбцом?

    Сейчас пока имею возможных ответов 256^52(весь последний столбец в обратной матрице), а это равносильно входным значениям, возможно только нечётные символы изменяют выходное решение(точно ещё не определил)
     
  12. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Aids
    1) Так что в программе вычисляется?
    M=(D*K1+K2)*K3

    и потом сравнивается с M', зашитым в ехе? так?

    2) По вашей формуле M=(D*K1+K2)*K3 получется, что умножение
    строки D происходит на матрицу K1..
    Но, в #1 приведен код, в котором происходит произведение матрицы на вектор-столбец (K1*D)...
    причем в памяти матрица лежит построчно - из этих сображений OLS вычислял обратную матрицу (и у меня, кстати, тоже получился такой результат)...
     
  13. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Да всё верно

    в #1 приведён код произведения D*K1 всё верно.
    Из кода OLS я взял только алгоритм нахождения обратной матрицы
    Код (Text):
    1. unsigned char** obr_gaus(int n,unsigned char **src){
    2.     int k,x,y,YMain,YOdd,YCheck,XCheck,v,i;
    3.     unsigned char **eq,**xsrc;
    4.     unsigned char bTmp,bDivisor,bMultiplier,bRowMultiplier;
    5.     unsigned char *INVERSE;
    6.     INVERSE=loadinverse("D:\\Temp\\1\\matr256.txt");
    7.     int sError=0;
    8.     eq=new unsigned char*[n];
    9.     xsrc=new unsigned char*[n];
    10.     for (int i=0;i<n;i++){
    11.         eq[i]=new unsigned char[n];
    12.         xsrc[i]=new unsigned char[n];
    13.         memset(eq[i],0,n*sizeof(unsigned char));
    14.     }
    15.     for (int i=0;i<n;i++) eq[i][i]=1;
    16.     //savefile("D:\\temp\\1\\test.txt",n,eq);
    17.     for (int i=0;i<n;i++)
    18.         for (int j=0;j<n;j++) xsrc[i][j]=src[i][j];
    19.     YMain=0;
    20.     do{
    21.         YOdd=YMain;
    22.         while ((src[YOdd][YMain]%2 == 0)&&(YOdd<(n-1))) YOdd++;
    23.         if (src[YOdd][YMain]%2 == 0) sError=1;
    24.         else{
    25.              if (YOdd!=YMain){
    26.                 for (int x=0;x<n;x++){
    27.                     bTmp=src[YMain][x]; src[YMain][x]=src[YOdd][x]; src[YOdd][x]=bTmp;
    28.                     bTmp=eq[YMain][x];  eq[YMain][x]=eq[YOdd][x];   eq[YOdd][x]=bTmp;
    29.                 }
    30.              }
    31.              bDivisor=src[YMain][YMain];
    32.              bMultiplier=INVERSE[bDivisor];
    33.              for (int x=0;x<n;x++){
    34.                  src[YMain][x]=(((int)(src[YMain][x]))*bMultiplier) % 256;
    35.                  eq[YMain][x]=(((int)(eq[YMain][x]))*bMultiplier) % 256;
    36.              }
    37.              for (int y=0;y<n;y++)
    38.                  if (y!=YMain){
    39.                     bRowMultiplier=src[y][YMain];
    40.                     for (int x=0;x<n;x++){
    41.                         src[y][x]=(((int)(src[y,x]))+256-((src[YMain][x]*bRowMultiplier) % 256)) % 256;
    42.                         eq[y][x] =(((int)(eq[y,x])) +256-((eq [YMain][x]*bRowMultiplier) % 256)) % 256;
    43.                     }
    44.                  }
    45.         }
    46.         YMain++;
    47.     }while ((YMain<n) && (sError==0));
    48.     return src;
    49. }
    а как он вычисляет проезвидение вектора на матрицу я даже не смотрел, т.к. у меня написаны свои функции произведения и сложения матриц
    Код (Text):
    1. for x:=0 to 51 do
    2.     begin
    3.     v:=0;
    4.     for i:=0 to 51 do
    5.         v:=v+eq[i,x]*vector[i];
    6.     s:=s+chr(v mod 256)
    7.     end;
    а здесь и правда K1*D
     
  14. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    gorodon
    вечером могу выложить алгоритм расчёта
    M=(D*K1+K2)*K3
    и D=(M*K3^-1-K2)*K1^-1
     
  15. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
  16. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    что то я помоему ошибся с количеством входных значений, оно одно. но вот символы не в нём немечатные. В edit не подсунешь
     
  17. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
  18. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Но оно соответствует M=(D*K1+K2)*K3 ?

    В принципе, можно немного задачу упростить (опять же, беру вашу формулу за основу):
    M=(D*K1+K2)*K3 (1)
    M=D*K1*K3+K2*K3
    D*(K1*K3)=M-K2*K3
    D*K4=M2 (4)

    K4=K1*K3
    M2=M-K2*K3

    и решать уже это уравнение (4)
     
  19. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    gorodon
    а смысл упрощать, уравнение решено. Только я не знаю одно решение у него или больше, так как в матрице K1^-1 элемент [51,51] чётный а точнее 0 и последний столбец не расчитался
     
  20. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    А матрицу K4^-1=(K1*K3)^-1 я пробовал считать та же фигня с последним элементом