Shift Cipher in C

Viewing 2 reply threads
  • Author
    Posts
    • #4262
      shednik
      Participant

      Hello all,

      I have a fairly simple program below that is to utilize the shift cipher to encrypt an entered string.  I have it working if I used a number when entering a value for k, but the requirement for the assignment is to use a Letter to denote 1-26 for the value of k.  I can’t seem to figure out what is wrong with my converChar function, if anyone has any thoughts please let me know..,I’m not a great programmer so I may have missed something small.


      #include
      #include
      #include
      #define  MAXCHARS  255
      #define  MAXS    4

      int convertChar(char *a);
      void encrypt();
      void decrypt();

      int main()
      {
          char response[MAXS],plaintext[MAXCHARS];
         
          printf("Shift Cipher ProgramnnWould you like to (E)ncrypt or (D)ecrypt a message or (Q)uit.  ");
          scanf("%s",response);
         
          while (response[0] != 'q' && response[0] != 'Q') {
                switch (response[0]) {
                      case 'e':
                      case 'E':
                            encrypt();
                            break;
                      case 'd':
                      case 'D':
                            decrypt();
                            break;
                      default:
                              printf("error: invalid commandn");
                              break;
                }//end of switch
                printf("nWould you like to (E)ncrypt or (D)ecrypt a message or enter Q to quit.  ");
                scanf("%s",response);
          }//end of while
          return 0;
      }//end of main


      void encrypt()
      {
          int i=0,k;
          char msg[MAXCHARS],*letter;

          printf("Please enter the plain text to encrypt in all CAPS and press entern");
          scanf ("%s",msg);
          printf("Please enter the alpha key(k) you would like to use  ");
          scanf ("%s",letter);
          k = convertChar(letter);
          while (msg!= '') {
                if ((msg
      +k) > 'Z')
                {
                    msg
      = ((((msg+k) - 'Z')-1) + 'A'); //wrap to the beginning
                    }
                else
                    msg
      = (msg+k);
                   
                i++;
          }
          printf("n%s", msg);
          }

      void decrypt()
      {
          int i=0,k;
          char msg[MAXCHARS],*letter;

          printf("Please enter the cipher text to decrypt in all CAPS and press entern");
          scanf ("%s",msg);
          printf("Please enter the alpha key(k) you would like to use  ");
       
          scanf ("%s",letter);
          k = convertChar(letter);
         
            while (msg
      != '') {
                if ((msg
      -k) < 'A'){
                 
                    msg
      = ('Z' - (('A' - (msg-k))-1)); } //wrap to the end.
                else {
               
                    msg
      = (msg-k); }   
                i++;
          }
          printf ("%sn",msg);
      }                       

      int convertChar(char *a)
      {
          static char *letters[26] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
          int i=0;
         
          while(i<26){
      if (strcmp(letters
      ,a)){
                  printf("%d",i);
      return (i+1); }
      else
      i++;
      }
      return 0;
      }


    • #27056
      mambru
      Participant

      There’s an error in your logic in the if statement of your convertChar() function. You should check the documentation for the strcmp() function and understand its return values, it has 3 different: greater than zero, less than zero, and zero. Also remember how the the if statement is decided, one you understand all these you’ll find your mistake.

      Other function that you may use instead of strcmp() and a sequential search, is strchr().

    • #27057
      gnix
      Participant

      Be careful when you use the scanf function to read a string and you don’t specify the length of a string. Often, a format with %s is vulnerable to a buffer overflow attack.

      gnix

Viewing 2 reply threads
  • You must be logged in to reply to this topic.

Copyright ©2021 Caendra, Inc.

Contact Us

Thoughts, suggestions, issues? Send us an email, and we'll get back to you.

Sending

Sign in with Caendra

Forgot password?Sign up

Forgot your details?