DilyaraL

КриптонХеш

May 19th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. int* double_h(int**h) //удваиваем хеш значение, чтобы использовать как ключ
  2. {
  3. int * k = new int[32];
  4. for (int i = 0; i < N; i++)
  5. for (int j = 0; j < N; j++)
  6. k[i*N + j] = h[i][j];
  7. for (int i = 0; i < N; i++)
  8. for (int j = 0; j < N; j++)
  9. k[i*N + j+16] = h[i][j];
  10. return k;
  11.  
  12. }
  13.  
  14. int** Hash(ifstream &f, ofstream&of)
  15. {
  16.  
  17. int** M = new int*[N];
  18. for (int i = 0; i < N; i++)
  19. M[i] = new int[N];
  20. for (int i = 0; i < N; i++)
  21. for (int j = 0; j < N; j++)
  22. M[i][j] = 0;
  23. int** h = new int*[N];
  24. for (int i = 0; i < N; i++)
  25. h[i] = new int[N];
  26. for (int i = 0; i < N; i++)
  27. for (int j = 0; j < N; j++)
  28. h[i][j] = 0;
  29.  
  30. int x = 0, k = 0, I = 0, J = 0;
  31. while (f>> x)//читаем файл
  32. {
  33. if ((k % 16 == 0) && (k != 0))
  34. {
  35. for (int i = 0; i < N; i++)
  36. for (int j = 0; j < N; j++)
  37. h[i][j] = M[i][j];
  38. M = encryption(M, key(double_h(h)));
  39. for (int i = 0; i < N; i++)
  40. for (int j = 0; j < N; j++)
  41. h[i][j] ^= M[i][j];
  42. }
  43. k++; I++; J++;
  44. if (I % 4 == 0) I = 0;
  45. if (J % 4 == 0) J = 0;
  46. M[I][J] ^= x;
  47. }
  48.  
  49. for (int l = I; l < N; l++)
  50. for (int m = J; m < N; m++)
  51. h[l][m] ^= (l + m) % 10;
  52. for (int i = 0; i < N; i++)
  53. for (int j = 0; j < N; j++)
  54. h[i][j] = M[i][j];
  55. M = encryption(M, key(double_h(h)));
  56. for (int i = 0; i < N; i++)
  57. for (int j = 0; j < N; j++)
  58. h[i][j] ^= M[i][j];
  59. for (int l = 0; l < N; l++)//вывод в файл
  60. {
  61. for (int m = 0; m < N; m++)
  62. of << h[l][m];
  63. }
  64. return h;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment