Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <unistd.h>
  5. #include <fstream>
  6. #include <cctype>
  7. #include <cstring>
  8. #include <sstream>
  9. #include <string>
  10. using namespace std;
  11. string polynomial, seed, message;
  12. int size = 0;
  13.  
  14. void printArray(short *arr){
  15. for(int i = 0; i < size; i++){
  16. cout<<arr[i];
  17. }
  18. cout<<endl;
  19. }
  20. void shiftArray(short *arr, int amount){
  21. if(amount > 0){
  22. for(int i = size - 1; i >= amount; i--){
  23. arr[i] = arr [i - amount];
  24. }
  25. for(int i = amount - 1; i >= 0; i--){
  26. arr[i] = 0;
  27. }
  28. }
  29. else if (amount < 0){
  30. for(int i = 0; i < size + amount; i++){
  31. arr[i] = arr[i - amount];
  32. }
  33. for(int i = size + amount; i < size; i++){
  34. arr[i] = 0;
  35. }
  36. }
  37. }
  38.  
  39. short generateBit(short *arr){
  40. short bit = 0;
  41. for(int i = 0; i < size; i++){
  42. if(polynomial[i] == '1'){
  43. bit += arr[i];
  44. }
  45. }
  46. return bit % 2;
  47. }
  48.  
  49. bool compareArrays(short *arr1, short*arr2){
  50. for(int i = 0; i < size; i++){
  51. if(arr1[i] != arr2[i])
  52. return false;
  53. }
  54. return true;
  55. }
  56. string encryptMessage(string basicString){
  57. polynomial = polynomial.substr(1,polynomial.length());
  58. size = polynomial.length();
  59. short *lfsr = new short [size];
  60. string outString="";
  61. for(int i = 0; i<size; i++){
  62. lfsr[i] = seed[i];
  63. }
  64. for(int i = 0; i < basicString.length();i++){
  65. short temp = generateBit(lfsr);
  66. short out = temp^basicString[i];
  67. outString+=out;
  68. shiftArray(lfsr, 1);
  69. lfsr[0] = out;
  70. }
  71. return outString;
  72. }
  73. string decryptMessage(string basicString){
  74. polynomial = polynomial.substr(1,polynomial.length());
  75. size = polynomial.length();
  76. short *lfsr = new short [size];
  77. string outString="";
  78. for(int i = 0; i<size; i++){
  79. lfsr[i] = seed[i];
  80. }
  81. for(int i = 0; i < basicString.length();i++){
  82. short temp = generateBit(lfsr);
  83. short out = temp^basicString[i];
  84. outString+=out;
  85. shiftArray(lfsr, 1);
  86. lfsr[0] = basicString[i];
  87. }
  88. return outString;
  89. }
  90.  
  91. int main(int argc, char **argv){
  92. string inName;
  93. string outName;
  94. char c;
  95. int o;
  96. bool encrypt = false;
  97. bool decrypt = false;
  98. bool polynomialEntered = false;
  99. bool seedEntered = false;
  100. char* arr1;
  101. while ((o = getopt (argc, argv, "edp:s:i:o:")) != -1) {
  102. switch (o) {
  103. case 'e':
  104. encrypt = true;
  105. break;
  106. case 'd':
  107. decrypt = true;
  108. break;
  109. case 'p':
  110. polynomialEntered = true;
  111. arr1 = optarg;
  112. polynomial = string(arr1);
  113. break;
  114. case 's':
  115. seedEntered = true;
  116. arr1 = optarg;
  117. seed = string(arr1);
  118. break;
  119. case 'i':
  120. arr1 = optarg;
  121. inName = string(arr1);
  122. break;
  123. case 'o':
  124. arr1 = optarg;
  125. outName = string(arr1);
  126. break;
  127. }
  128. }
  129. ifstream input (inName, ios::binary);
  130. ofstream output (outName);
  131. ostringstream ss;
  132. ss << input.rdbuf();
  133. string dataFromFile = ss.str();
  134. if(!input || ! output){
  135. printf("Unable to open input or output file! \n");
  136. printf("Input file should be given using flag -i and output -o ");
  137. return 0;
  138. }
  139.  
  140. if(!encrypt && !decrypt){
  141. printf("Use flag -e to encrypt and -d to decrypt\n");
  142. return 0;
  143. }
  144. if(!polynomialEntered || !seedEntered){
  145. printf("Please specify polynomial and seed.");
  146. cout<<polynomial<<" "<<seed;
  147. return 0;
  148. }
  149. if(polynomial.size()-1 != seed.size()){
  150. printf("Polynomial size and seed size must be equal.");
  151. return 0;
  152. }
  153.  
  154.  
  155. if(encrypt){
  156. output<<encryptMessage(dataFromFile);
  157. }
  158. if(decrypt){
  159. output<<decryptMessage(dataFromFile);
  160. }
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement