<mosaic.cnfolio.com>
PROGRAM
  1. /*                                                          Matt Read-up862752-Member17484
  2. ============================================================================================================================================
  3.                                                                  ####PSEUDO CODE####                                                                     
  4. ============================================================================================================================================
  5. ACQUIRE INPUT CIPHER KEY LENGTH AND ERROR CHECK                                                                                                          
  6. ============================================================================================================================================
  7.                                                                                                                                                          
  8. IF THE CIPHER KEY IS LESS THAN 2                                                                                                                 
  9. THEN DISPLAY "ERROR YOU HAVE ENTERED [input] AS YOUR CIPHER KEY LENGTH. IT SHOULD BE GREATER THAN 2."                                          
  10. END IF                                                                                                                                            
  11.                                                                                                                                                   
  12. IF THE CIPHER KEY IS GREATER THAN 16                                                                                                             
  13. THEN DISPLAY "ERROR YOU HAVE ENTERED [input] AS YOUR CIPHER KEY LENGTH. IT SHOULD BE LESS THAN 16."                                              
  14. END IF                                                                                                                                           
  15.                                                                                                                                                  
  16. IF THE CIPHER KEY IS A LETTER                                                                                                                     
  17. THEN DISPLAY "ERROR, YOUR LENGTH OF CIPHER KEY CONTAINS LETTERS. PLEASE ENTER AN INTEGER VALUE IN THE RANGE OF 2 TO 16."                                
  18. END IF                                                                                                                                           
  19.                                                                                                                                                  
  20. IF THE CIPHER KEY IS A SPECIAL CHARACTER                                                                                                          
  21. THEN DISPLAY "ERROR, YOU HAVE ENTERED [input] WHICH IS A SPECIAL CHARACTER AS YOUR CIPHER KEY LENGTH. PLEASE ENTER AN INTEGER VALUE."              
  22. END IF                                                                                                                                           
  23.                                                                                                                                                  
  24. ============================================================================================================================================
  25. ACQUIRE INPUT CIPHER TEXT AND ERROR CHECK                                                                                                        
  26. ============================================================================================================================================
  27.                                                                                                                                                  
  28. IF THE CIPHER KEY TEXT IS NOT EQUAL TO THE CIPHER KEY LENGTH                                                                                 
  29. THEN DISPLAY "ERROR, THE CIPHER TEXT IS NOT EQUAL TO THE CIPHER KEY LENGTH, IT SHOULD BE IN THE RANGE OF 2 TO 16"                                   
  30. END IF                                                                                                                                           
  31.                                                                                                                                                  
  32. IF THE CIPHER KEY TEXT CONTAINS ANY UPPER CASE LETTERS                                                                                           
  33. THEN DISPLAY "ERROR, YOUR CIPHER TEXT [input] CONTAINS SOME UPPER CASE CHARACTERS. PLEASE ENTER LOWER CASE CHARACTERS."                            
  34. END IF                                                                                                                                           
  35.                                                                                                                                       
  36. IF THE CIPHER KEY TEXT CONTAINS ANY SPECIAL CHARACTERS                                                                                           
  37. THEN DISPLAY "ERROR, YOU HAVE ENTERED [input] FOR YOUR CIPHER TEXT WHICH CONTAINS SPECIAL CHARACTERS. PLEASE ENTER LETTERS."                 
  38. END IF                                                                                                                                           
  39.                                                                                                                                                  
  40. IF THE CIPHER KEY TEXT CONTAINS ANY NUMERICAL CHARACTERS                                                                                         
  41. THEN DISPLAY "ERROR YOU HAVE ENTERED [input] WHICH CONTAINS NUMBERS AS YOUR CIPHER TEXT. PLEASE ENTER LETTERS."                                   
  42. END IF                                                                                                                                           
  43.                                                                                                                                                  
  44. IF THE CIPHER KEY TEXT CONTAINS ANY DUPLICATE CHARACTERS                                                                                         
  45. THEN DISPLAY "ERROR YOU HAVE ENTERED MULTIPLE CHARACTERS IN YOUR CIPHER TEXT"                                                                    
  46. END IF                                                                                                                                           
  47.                                                                                                                                                  
  48. ============================================================================================================================================
  49. ACQUIRE INPUT LENGTH FOR TEXT TO ENCRYPT AND ERROR CHECK                                                                                         
  50. ============================================================================================================================================
  51.                                                                                                                                                  
  52. IF THE ENCRYPTION TEXT IS LESS THAN 4                                                                                                         
  53. THEN DISPLAY "ERROR YOU HAVE ENTERED [input] FOR THE LENGTH OF ENCRYPTION TEXT. IT SHOULD BE GREATER THAN 4."                                     
  54. END IF                                                                                                                                           
  55.                                                                                                                                                   
  56. IF THE ENCRYPTION TEXT IS GREATER THAN 256                                                                                                    
  57. THEN DISPLAY "ERROR YOU HAVE ENTERED [input] FOR THE LENGTH OF ENCRYPTION TEXT IT SHOULD BE LESS THAN 256."                                   
  58. END IF                                                                                                                                                   
  59.                                                                                                                                                          
  60. IF THE ENCRYPTION TEXT CONTAINS ANY SPECIAL CHARACTERS                                                                                              
  61. THEN DISPLAY "ERROR, YOUR LENGTH OF ENCRYPTION TEXT CONTAINS SPECIAL CHARACTERS. PLEASE ENTER AN INTEGER VALUE IN THE RANGE OF 4 TO 256."            
  62. END IF                                                                                                                                          
  63.                                                                                                                                                          
  64. IF THE ENCRYPTION TEXT CONTAINS ANY LETTERS                                                                                         
  65. THEN DISPLAY "ERROR, YOUR LENGTH OF ENCRYPTION TEXT CONTAINS LETTERS. PLEASE ENTER AN INTEGER VALUE IN THE RANGE OF 4 TO 256."                
  66. END IF                                                                       
  67. ============================================================================================================================================
  68. ACQUIRE INPUT TEXT TO ENCRYPT AND ERROR CHECK                                                                                                               
  69. ============================================================================================================================================
  70.                                                                                                                                                  
  71. IF THE ENCRYPTION TEXT CONTAINS ANY UPPER CASE LETTERS                                                                                           
  72. THEN DISPLAY "ERROR, YOUR ENCRYPTION TEXT [input] CONTAINS SOME UPPER CASE CHARACTERS. PLEASE ENTER LOWER CASE CHARACTERS."                         
  73. END IF                                                                                                                                            
  74.                                                                                                                                                   
  75. IF THE ENCRYPTION TEXT CONTAINS ANY SPECIAL CHARACTERS                                                                                            
  76. THEN DISPLAY "ERROR, YOU HAVE ENTERED [input] FOR YOUR ENCRYPTION TEXT WHICH CONTAINS SPECIAL CHARACTERS. PLEASE ENTER LETTERS."                     
  77. END IF                                                                                                                                            
  78.                                                                                                                                                   
  79. IF THE ENCRYPTION TEXT CONTAINS ANY NUMERICAL CHARACTERS                                                                                          
  80. THEN DISPLAY "ERROR YOU HAVE ENTERED [input] WHICH CONTAINS NUMBERS AS YOUR ENCRYPTION TEXT. PLEASE ENTER LETTERS."                     
  81. END IF                                                                                                                                            
  82.                                                                                                                                                          
  83. IF THE ENCRYPTION TEXT DOSE NOT EQUAL THE ENCRYPTION LENGTH                                                                           
  84. THEN DISPLAY "ERROR, THE ENCRYPTION TEXT IS NOT EQUAL TO THE LENGTH OF THE ENCRYPTION, IT SHOULD BE IN THE RANGE OF 4 TO 256"                         
  85. END IF                                                                                                                                                   
  86.                                                                                                                                                   
  87. ============================================================================================================================================
  88. START SUBSTITUTION AND ENCRYPTION STAGE                                                                                                          
  89. ============================================================================================================================================
  90.                                                                                                                                                  
  91. THE CHARACTER FOUND AT POSITION N IN THE CIPHER KEY IS THE TARGET VALUE                                                                           
  92.                                                                                                                                                  
  93. THE CHARACTER FOUND AT POSITION N+1 IN THE CIPHER KEY IS THE SUBSTITUTION VALUE                                                                  
  94.                                                                                                                                                  
  95. IN THE SITUATION THAT N IS THE LAST CHARACTER IN THE CIPHER KEY, THEN, THE SUBSTITUTION VALUE IS                                                 
  96.                                                                                                                                                   
  97. THE FIRST CHARACTER OF THE CIPHER KEY                                                                                                             
  98.                                                                                                                                                   
  99. IN THE PLAIN TEXT, REPLACE ALL INSTANCES OF THE TARGET VALUE WITH THE SUBSTITUTION VALUE                                                          
  100.                                                                                                                                                   
  101. INCREASE N BY ONE AND REPEAT ALL STEPS UNTIL THE END OF THE CIPHER KEY                                                                            
  102. *///                                                                                                                                              
  103. //==========================================================================================================================================
  104. //             ###~MAIN_CODE~###                         //                             ###~COMMENTS_FOR_MAIN_CODE~###                                   
  105. //==========================================================================================================================================
  106.                                                                                                                                                
  107.                                                                                                                                           
  108. #include <stdio.h>                                     /*   Defines core input and output functions */                                                   
  109. #include <string.h>                             /* Defines string handling functions       */                                                 
  110. #include <ctype.h>                         /*  Defines set of functions used to classify characters by their types */                     
  111.                                                                                                                               
  112. #define MIN_STRING 4                       /*   Make the variable MIN_STRING equal to 4 */                                                  
  113. #define MAX_STRING 256                                 /* Make the variable MAX_STRING equal to 256 */                                               
  114. #define MAX_CIPHER 16                        /* Make the variable MAX_CIPHER equal to 16 */                                                 
  115. #define MIN_CIPHER 2                       /*   Make the variable MIN_CIPHER equal to 2 */                                                 
  116. #define TRUE 1                                         /* Make the variable TRUE equal to 1 */                                                       
  117. #define FALSE 0                            /*  Make the variable FALSE equal to 0 */                                                       
  118.                                                                                                                                 
  119. int main(void){                                                                                                                                   
  120.                                                                                                                                  
  121. int i=0, j=0, n=0, x=0, N=0;                            // Initialize integer variables i, j, n, x, N                                               
  122. int cipher_key = 0, cipher_length = 0;             // Initialize integer variables cipher_key, cipher_length                                   
  123. char ch, cipher_text[MAX_CIPHER], y;               //  Create Character variables ch, cipher_text[16], y                                         
  124. char cipher_string[MAX_STRING];                         // Create Character variables cipher_string[256]                                             
  125. char cipher_new[MAX_STRING];                            // Create Character variables cipher_new[256]                                                 
  126. int error_flag = 0;                                    // Initialize integer variables error_flag                                                   
  127. int count = 0;                          // Initialize integer variables count                                                       
  128.                                                                                                                                 
  129. scanf("%d", &cipher_key);                               // Aquire the decimal input and asine it to the variable                                   
  130. scanf("%c", &ch);                         // Aquire the character input and asine it to the variable                                     
  131. if((ch < 33 || ch > 47) && (ch < 58 || ch > 64)){          // If variable is not in the special character asci range, continue code                     
  132. if((ch < 91 || ch > 96) && (ch < 123 || ch > 126)){      // If variable is not in the special character asci range, continue code                   
  133. if((ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z')){    // If variable is not in the alphabet character asci range, continue code                   
  134. if(cipher_key >= MIN_CIPHER){                  // If variable is greater than equal to 2, continue code                                       
  135. if(cipher_key <= MAX_CIPHER){                  //   If variable is less than equal to 16, continue code                                       
  136.                                                                                                                                             
  137. scanf("%s", &cipher_text);                            // Aquire the string input and asine it to the variable                                     
  138.                                                                                                                                               
  139. for(n=0; n < cipher_key; n++)                         // Variable n increments from 0 to the length of the cipher text                             
  140. if(isdigit(cipher_text[n])){                    //  Check if it is a digit, if not, continue code                                             
  141. error_flag = 1;                                     //   If it is a digit set error flag to 1                                                     
  142. }                                                                                                                                    
  143. if(error_flag != 1){                                // If error flag is not 1, continue code                                                     
  144.                                                                                                                                             
  145. for(j=0; j < cipher_key; j++)                         // Variable j increnets from 0 to the length of the cipher text                             
  146. if(ispunct(cipher_text[j])){                    //  Check if it is a special character, if not continue code                                 
  147. error_flag = 2;                                     //   If it is a special character set error flag to 2                                         
  148. }                                                                                                                             
  149. if(error_flag != 2){                                // If error flag is not 2, cotinue code                                                     
  150.                                                                                                                                   
  151. for(y=1; cipher_text[y] !=0; y++);                 //  Variable y increments when not equal to 0                                                 
  152. if(y != cipher_key){                                // If the cipher text is not equal to the length of the cipher text                         
  153. error_flag = 3;                                     //   Set error flag to 3                                                                       
  154. }                                                                                                                            
  155. if(error_flag != 3){                                // If error not equal to 3, continue code                                                   
  156.                                                                                                                                 
  157. for(i=0; i < cipher_key; i++){                         //   Variable i increments from 0 to the length of the cipher text                             
  158. for(j=i+1; j < cipher_key; j++){                        // Variable j increments from i+1 to the length of the cipher text                           
  159. if(cipher_text[i] == cipher_text[j]){                    //   Compaire cipher text at possition i to cipher text at possition j, if equal               
  160. count++;                                             // If duplicate found then increment count by 1                                               
  161. break;                                 // Break out of for loop if duplicate found                                                   
  162. }                                                                                                                                                 
  163. }                                                                                                                                                       
  164. }                                                                                                                                                   
  165. if(count != TRUE){                                 //   If count is not equal to 1, continue code                                                 
  166.                                                                                                                                        
  167. for(n=0; n < cipher_key; n++)                  //   Variable n increments from 0 to the length of the cipher text                                   
  168. if(isupper(cipher_text[n])){                            // If it is an Uppercase letter                                                                   
  169. error_flag = 4;                            // Set error flag to 4                                                                       
  170. }                                                                                                                                                       
  171. if(error_flag != 4){                       //   If error flag is not equal to 4, continue code                                                 
  172.                                                                                                                                               
  173. scanf("%d", &cipher_length);                    // Aquire the decimal input and asine it to the variable                                     
  174. scanf("%c", &ch);                                        // Aquire the decimal input and asine it to the variable                                       
  175. if((ch < 33 || ch > 47) && (ch < 58 || ch > 64)){          // If variable is not in the special character asci range, continue code                     
  176. if((ch < 91 || ch > 96) && (ch < 123 || ch > 126)){      //  If variable is not in the special character asci range, continue code                     
  177. if((ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z')){    // If variable is not in the alphabet character asci range, continue code                   
  178. if(cipher_length >= MIN_STRING){                 // If variable is greater than equal to 4, continue code                                     
  179. if(cipher_length <= MAX_STRING){                 // If variable is less than equal to 256, continue code                                       
  180.                                                                                                                                               
  181. scanf("\n%[^\n]",&cipher_string);                //  Aquire the string input and asine it to the variable, include spaces until \n             
  182. strncpy(cipher_new, cipher_string, cipher_length);       // Copy the the data in one memory location to another, cipher string to cipher new         
  183.                                                                                                                                   
  184. for(n=0; n < cipher_length; n++)                 //   Variable n increments from 0 to the length of the encryption text length                 
  185. if(isdigit(cipher_string[n])){                   //  Check if it is a digit at position n, if not, continue code                               
  186. error_flag = 5;                            //  If it is a diget set error flag to 5                                                       
  187. }                                                                                                                                                   
  188. if(error_flag!= 5){                                    // If error flag is not equal to 5, continue code                                           
  189.                                                                                                                                     
  190. for(j=0; j < cipher_length; j++)                 // Variable j increments from 0 to the length of the encryption text length                
  191. if(ispunct(cipher_string[j])){                   // Check if it is a special character at position j, if not continue code                   
  192. error_flag = 6;                            // If it is a special character set error flag to 6                                         
  193. }                                                                                                                                                 
  194. if(error_flag != 6){                       // If error flag is not equal to 6, continue code                                               
  195.                                                                                                                                 
  196. for(y=1; cipher_string[y] != 0; y++);                    // Variable y increments when not equal to 0                                                 
  197. if(y != cipher_length){                     // If the encryption length is not equal to the length of the encryption text               
  198. error_flag = 7;                            // Set error flag to 7                                                                       
  199. }                                                                                                                                                 
  200. if(error_flag != 7){                       // If error flag is not equal to 7, continue code                                           
  201.                                                                                                                                 
  202. for(n=0; n < cipher_length; n++)                      // Variable n increments from 0 to the length of the encryption text length                   
  203. if(isupper(cipher_string[n])){                   // check if it is an Uppercase letter at position n, if not continue code                     
  204. error_flag = 8;                            // Set error flag to 8                                                                       
  205. }                                                                                                                                                 
  206. if(error_flag != 8){                       // If error flag is not equal to 8, continue code                                           
  207.                                                                                                                                 
  208. cipher_text[cipher_key] = cipher_text[0];            // value at possition cipher text length is equal to value at possition 0                   
  209.                                                                                                                                   
  210. for(x=0; x < cipher_key; x++){                   // Variable x increments from 0 to the length of the cipher text                             
  211. for(N=0; N < cipher_length; N++){                // Variable N increments from 0 to the length of the encryption text length                 
  212. if(cipher_string[N] == cipher_text[x]){              // Compare encryption text at position n to cipher text at position x, if equal             
  213. cipher_new[N] = cipher_text[x+1];                //  Make the cipher text at position x+1 equal to Encryption new text at position N           
  214. }                                                                                                                                                 
  215. }                                                                                                                                                 
  216. i=x+1;                                            // Add 1 to the value stored in the variable i                                               
  217. printf(" \n Step %d", i);                                // Display "step" number                                                                     
  218. printf(" substitute %c", cipher_text[x]);                // Display "substitute" the first substitution character                                     
  219. printf(" with %c.", cipher_text[x + 1]);                 // Display "with" the second substitution character                                         
  220. printf("\n %s", cipher_new);                             // Display the new and final encryption text                           
  221.                                                                                                                                                        
  222. //==========================================================================================================================================
  223. //             ###~ERROR_MESSAGES~###                    //                                   ###~ERROR_MESSAGES~###                                     
  224. //==========================================================================================================================================
  225. }                                                                                                                                                 
  226. }else{                                                                                                                              
  227. printf("ERROR, YOUR ENCRYPTION TEXT [%s] CONTAINS SOME UPPER CASE CHARACTERS. PLEASE ENTER LOWER CASE CHARACTERS.\n",cipher_string);                 
  228. }                                                                                                                                                 
  229. }else{                                                                                                                              
  230. printf("ERROR, THE ENCRYPTION TEXT IS NOT EQUAL TO THE LENGTH OF THE ENCRYPTION, IT SHOULD BE IN THE RANGE OF 4 TO 256");                       
  231. }                                                                                                                                               
  232. }else{                                                                                                                              
  233. printf("ERROR, YOU HAVE ENTERED [%s] FOR YOUR ENCRYPTION TEXT WHICH CONTAINS SPECIAL CHARACTERS. PLEASE ENTER LETTERS.\n", cipher_string);         
  234. }                                                                                                                                                 
  235. }else{                                                                                                                            
  236. printf("ERROR YOU HAVE ENTERED [%s] WHICH CONTAINS NUMBERS AS YOUR ENCRYPTION TEXT. PLEASE ENTER LETTERS.\n", cipher_string);                 
  237. }                                                                                                                                
  238. }else{                                                                                                                              
  239. printf("ERROR YOU HAVE ENTERED [%d] FOR THE LENGTH OF ENCRYPTION TEXT IT SHOULD BE LESS THAN 256.\n", cipher_length);                            
  240. }                                                                                                                                                 
  241. }else{                                                                                                                            
  242. printf("ERROR YOU HAVE ENTERED [%d] FOR THE LENGTH OF ENCRYPTION TEXT. IT SHOULD BE GREATER THAN 4.\n", cipher_length);                           
  243. }                                                                                                                                                 
  244. }else{                                                                                                                              
  245. printf("ERROR, YOUR LENGTH OF ENCRYPTION TEXT CONTAINS LETTERS. PLEASE ENTER AN INTEGER VALUE IN THE RANGE OF 4 TO 256..\n");                     
  246. }                                                                                                                                                 
  247. }else{                                                                                                                              
  248. printf("ERROR, YOUR LENGTH OF ENCRYPTION TEXT CONTAINS SPECIAL CHARACTERS. PLEASE ENTER AN INTEGER VALUE IN THE RANGE OF 4 TO 256.\n");              
  249. }                                                                                                                                               
  250. }else{                                                                                                                              
  251. printf("ERROR, YOUR LENGTH OF ENCRYPTION TEXT CONTAINS SPECIAL CHARACTERS. PLEASE ENTER AN INTEGER VALUE IN THE RANGE OF 4 TO 256.\n");              
  252. }                                                                                                                                                 
  253. }else{                                                                                                                              
  254. printf("ERROR, YOUR CIPHER TEXT [%s] CONTAINS SOME UPPER CASE CHARACTERS. PLEASE ENTER LOWER CASE CHARACTERS.\n", cipher_text);                     
  255. }                                                                                                                                                 
  256. }else{                                                                                                                              
  257. printf("ERROR YOU HAVE ENTERED MULTIPLE CHARACTERS IN YOUR CIPHER TEXT.\n");                                                       
  258.                                                                                                                                                        
  259.                                                                                                                                                    
  260. printf("TOTAL NUMBER OF DUPLICATE CHARACTERS FOUND IN THE CIPHER TEXT = [%d] \n", count);                             
  261. }                                                                                                                                                 
  262. }else{                                                                                                                              
  263. printf("ERROR, THE CIPHER TEXT IS NOT EQUAL TO THE CIPHER KEY LENGTH, IT SHOULD BE IN THE RANGE OF 2 TO 16");                               
  264. }                                                                                                                                                 
  265. }else{                                                                                                                              
  266. printf("ERROR, YOU HAVE ENTERED [%s] FOR YOUR CIPHER TEXT WHICH CONTAINS SPECIAL CHARACTERS. PLEASE ENTER LETTERS.\n", cipher_text);              
  267. }                                                                                                                                                 
  268. }else{                                                                                                                              
  269. printf("ERROR YOU HAVE ENTERED [%s] WHICH CONTAINS NUMBERS AS YOUR CIPHER TEXT. PLEASE ENTER LETTERS.\n",cipher_text);                         
  270. }                                                                                                                                                 
  271. }else{                                                                                                                              
  272. printf("ERROR YOU HAVE ENTERED [%d] AS YOUR CIPHER KEY LENGTH. IT SHOULD BE LESS THAN 16.\n", cipher_key);                                 
  273. }                                                                                                                                                 
  274. }else{                                                                                                                              
  275. printf("ERROR YOU HAVE ENTERED [%d] AS YOUR CIPHER KEY LENGTH. IT SHOULD BE GREATER THAN 2.\n", cipher_key);                                          
  276. }                                                                                                                                                 
  277. }else{                                                                                                                              
  278. printf("ERROR, YOUR LENGTH OF CIPHER KEY CONTAINS LETTERS. PLEASE ENTER AN INTEGER VALUE IN THE RANGE OF 2 TO 16.\n");                           
  279. }                                                                                                                                                 
  280. }else{                                                                                                                              
  281. printf("ERROR, YOU HAVE ENTERED [%c] WHICH IS A SPECIAL CHARACTER AS YOUR CIPHER KEY LENGTH. PLEASE ENTER AN INTEGER VALUE.\n", ch);                  
  282. }                                                                                                                                                 
  283. }else{                                                                                                                              
  284. printf("ERROR, YOU HAVE ENTERED [%c] WHICH IS A SPECIAL CHARACTER AS YOUR CIPHER KEY LENGTH. PLEASE ENTER AN INTEGER VALUE.\n", ch);                 
  285. }                   
  286. return FALSE;                                                           
  287. }                                                  
  288. //==========================================================================================================================================