Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. int get_file_len(const char *filename) {
  10. ifstream fin(filename, std::ifstream::ate | std::ifstream::binary);
  11. if (!fin.is_open()) {
  12. return -1;
  13. }
  14. int len= fin.tellg();
  15. fin.close();
  16. return len;
  17. }
  18.  
  19. void task1() {
  20. cout << get_file_len("D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\file.doc") << endl;
  21. }
  22.  
  23. void task2(const char *filename) {
  24. int freq[256];
  25. for (long i = 0; i < 256; freq[i++] = 0);
  26.  
  27. ifstream fin(filename,ios::binary);
  28. if (!fin.is_open()) {
  29. cout << "AAAAAAA" << endl;
  30. return;
  31. }
  32. char q;
  33. while (fin.get(q)) {
  34. freq[q]++;
  35. }
  36. for (int i = 0; i < 256; i++) {
  37. cout << i << "\t|" << freq[i]<<endl;
  38. }
  39.  
  40. }
  41.  
  42. void encode(const char *filename,const char *key_file, int cols = 5) {
  43. vector<int> key;
  44. for (int i = 0; i < cols; i++) {
  45. key.push_back(0);
  46. }
  47. ifstream fkey(key_file);
  48. for (int i = 0; i < cols; i++) {
  49. fkey >> key[i];
  50. }
  51. fkey.close();
  52.  
  53. int len = get_file_len(filename);
  54. if (len == -1) {
  55. return;
  56. }
  57. int len_ = len;
  58. if (len % cols) {
  59. len_ += cols - len % cols;
  60. }
  61. vector<vector<char>> result;
  62. for (int i = 0; i < cols; i++) {
  63. result.push_back({});
  64. }
  65.  
  66. ifstream f2code(filename, ios::binary);
  67.  
  68. for (int i = 0; i < len_;i++) {
  69. if (i >= len)
  70. result[key[i % cols]-1].push_back('z');
  71. else
  72. result[key[i % cols]-1].push_back(f2code.get());
  73. }
  74. f2code.close();
  75.  
  76.  
  77. char *fout_name = NULL;
  78. fout_name = _strdup(filename);
  79. strcat(fout_name, ".ddlab1");
  80. ofstream fout(fout_name, ofstream::binary);
  81.  
  82. for (int i = 0; i < cols; i++) {
  83. for (int j = 0; j < result[i].size(); j++) {
  84. fout.put(result[i][j]);
  85. }
  86. }
  87. fout.close();
  88.  
  89. }
  90. void decode(const char* filename, const char* key_file, int cols = 5) {
  91. vector<vector<char>> result;
  92. for (int i = 0; i < cols; i++) {
  93. result.push_back({});
  94. }
  95. vector<int> key;
  96. for (int i = 0; i < cols; i++) {
  97. key.push_back(0);
  98. }
  99. ifstream fkey(key_file);
  100. for (int i = 0; i < cols; i++) {
  101. fkey >> key[i];
  102. }
  103. fkey.close();
  104.  
  105. int len = get_file_len(filename);
  106.  
  107. int rows = len / cols;
  108.  
  109. ifstream fin(filename, ifstream::binary);
  110.  
  111. for (int i = 0; i < cols; i++) {
  112. for (int j = 0; j < rows; j++) {
  113. result[i].push_back(fin.get());
  114. }
  115. }
  116. fin.close();
  117.  
  118. char* fout_name = NULL;
  119. fout_name = _strdup(filename);
  120. strcat(fout_name, ".ddlab1_decoded");
  121. ofstream fout(fout_name, ofstream::binary);
  122.  
  123. for (int i = 0; i < rows; i++) {
  124. for (int j = 0; j < cols; j++) {
  125. fout << result[key[j] - 1][i];
  126. }
  127. }
  128. fout.close();
  129. }
  130.  
  131.  
  132. int main() {
  133. task1();
  134.  
  135. task2("D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\file.doc");
  136.  
  137. encode("D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\file.doc",
  138. "D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\key.txt");
  139.  
  140. decode("D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\file.doc.ddlab1",
  141. "D:\\MTReload\\MIET\\DD\\DD_Lab1\\x64\\Debug\\key.txt");
  142.  
  143. return 0;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement