<mosaic.cnfolio.com>
PROGRAM
  1. /*
  2.  
  3. START
  4.  
  5. INPUT cipher key length
  6.  
  7. IF    cipher key length is in the range of 2 to 16
  8.  
  9.       INPUT cipher key
  10.    
  11.       IF    cipher key is in lowercase alphabets (a-z) with no duplicates
  12.    
  13.             IF    cipher key matches the cipher key length 
  14.  
  15.                   INPUT plain text length
  16.  
  17.                   IF    plain text length is in the range of 4 to 256
  18.  
  19.                         INPUT plain text
  20.  
  21.                         IF  plain text is in lowercase alphabets (a-z) allowing spaces
  22.       
  23.                               IF    plain text matches the plain text length
  24.                
  25.                
  26.      
  27.                                     LABEL 'N' as the target value for substitution in the cipher key array
  28.                  
  29.                                     LABEL 'N+1' as the substituion value
  30.                  
  31.                                     FOR the amount of times stated by cipher key length
  32.                  
  33.                                     substitute 'N' the current position with 'N+1' the next position
  34.                  
  35.                                     IF    'N' reaches the last position of the array
  36.                  
  37.                                           substitute the last position with the first position of the array
  38.      
  39.                                           DISPLAY number of each steps with target value and substitution value of each step.
  40.      
  41.                                           DISPLAY encrypted text at each substitution step.
  42.                      
  43.                      
  44.    
  45.                               ELSE  DISPLAY "plain text has to match the plain text length"
  46.                
  47.                         ELSE  DISPLAY "plain text has to in lowercase alphabets (a-z)"
  48.            
  49.                   ELSE  DISPLAY "plain text has to be in the range of 4 to 256"
  50.      
  51.             ELSE  DISPLAY "cipher key has to match cipher key length"
  52.      
  53.       ELSE  DISPLAY "cipher key has to be in lowercase alphabets with no duplicates"
  54.    
  55. ELSE    DIPLAY "cipher key length has to be in the range 2 to 16"
  56.  
  57. END
  58.  
  59. */
  60.  
  61. //Header files//
  62.  
  63. #include <stdio.h>
  64. #include <string.h>
  65. #include <ctype.h>
  66.  
  67. //Declaration of variables and arrays//
  68.  
  69. int cipherkeylength, plaintextlength;
  70.  
  71. int N, j, k, l;
  72.  
  73. char cipherkey[16], plaintext1[256], plaintext2[256];
  74.  
  75. //Main function//
  76.  
  77. int main(void){
  78.  
  79. //Reading input and checking if it meets the conditions to proceed with the program//
  80.  
  81.    scanf("%d", &cipherkeylength);
  82.  
  83.    if(cipherkeylength > 1 && cipherkeylength < 17){
  84.  
  85.       for(k=0;k<1;k++){
  86.  
  87.          if(scanf("%s", &cipherkey[k]), isalpha(cipherkey[k]), islower(cipherkey[k])){  //Condition to check if cipher key is in lowercase alphabets//
  88.          
  89.             if(strlen(cipherkey)==cipherkeylength){      //Condition to check if the cipher key's string length matches the input of cipher key length//
  90.  
  91.                scanf("%d", &plaintextlength);
  92.  
  93.                if(plaintextlength > 3 && plaintextlength < 257){
  94.  
  95.                   for(k=0;k<1;k++){
  96.  
  97.                      if(scanf("\n%[^\n]", &plaintext1[k]), isalpha(plaintext1[k]), islower(plaintext1[k])){  //Condition to check if plain text is in lowercase alphabets//
  98.                                   
  99. //\n%[^\n] was used to scan the whole line of input including spaces in between each word//                       
  100.                        
  101.                         if(strlen(plaintext1)==plaintextlength){    //Condition to check if the plain text's string length matches the input of plain text length//
  102.  
  103. //Encryption process//
  104.  
  105.                            strncpy(plaintext2, plaintext1, 256);    //Copies plaintext1's string to plaintext2 (plaintext2 will be the substituted output)//                                                                       
  106.                                      
  107.                            for(N=0;N<cipherkeylength;N++){    //Loops for the amount of times stated in the input for cipher key length//
  108.  
  109.                               for(j=0;j<plaintextlength;j++){    //Loops for the amount of times stated in the input for plain text length//
  110.  
  111.                                  if(plaintext1[j]==cipherkey[N]){  //[N] is the target value in the cipherkey//
  112.  
  113.                                     plaintext2[j]=cipherkey[N+1];  //[N+1] is the substitution value in the cipherkey//
  114.  
  115.                                  }
  116.                               }
  117.  
  118.                            l=N+1;   //Increments step for each loop (Step 1, Step 2, Step 3, etc)//
  119.  
  120.                            cipherkey[cipherkeylength]=cipherkey[0]//Setting the array location for cipher key to 0 (first slot of array)//
  121.  
  122.                            printf("\nStep %d substitute %c with %c", l, cipherkey[N], cipherkey[N+1]);   //Prints out procedure of the process//
  123.  
  124.                            printf("\n%s", plaintext2);   //Prints out substituted version//
  125.  
  126.                            }
  127.                         }
  128.                        
  129. //Error messages displayed when condition is not met//   
  130.  
  131.                         else
  132.                         {printf("Plain text has to match plain text length");}
  133.                      
  134.                      }           
  135.  
  136.                      else
  137.                      {printf("Plain text has to be in lowercase alphabets");}
  138.  
  139.                   }
  140.                }
  141.  
  142.                else
  143.                {printf("Plain text length has to be in numbers from 4 to 256 characters");}
  144.             }
  145.  
  146.             else
  147.             {printf("Cipher key has to match cipher key length");}
  148.  
  149.          }
  150.  
  151.          else
  152.          {printf("Cipher key has to be in lowercase alphabets");}
  153.  
  154.       }
  155.    }
  156.  
  157.    else
  158.    {printf("Cipher key length has to be in numbers from 2 to 16");}
  159.  
  160. }