.

Shift Cipher in C

<<

shednik

Jr. Member
Jr. Member

Posts: 75

Joined: Thu Sep 11, 2008 7:30 am

Post Mon Sep 14, 2009 11:51 am

Shift Cipher in C

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.

  Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define  MAXCHARS  255
#define  MAXS    4

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

int main()
{
    char response[MAXS],plaintext[MAXCHARS];
   
    printf("Shift Cipher Program\n\nWould 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 command\n");
                         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 enter\n");
     scanf ("%s",msg);
     printf("Please enter the alpha key(k) you would like to use  ");
     scanf ("%s",letter);
     k = convertChar(letter);
     while (msg[i]!= '\0') {
           if ((msg[i]+k) > 'Z')
           {
              msg[i] = ((((msg[i]+k) - 'Z')-1) + 'A'); //wrap to the beginning
              }
           else
               msg[i] = (msg[i]+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 enter\n");
     scanf ("%s",msg);
     printf("Please enter the alpha key(k) you would like to use  ");
 
     scanf ("%s",letter);
     k = convertChar(letter);
    
      while (msg[i]!= '\0') {
          if ((msg[i]-k) < 'A'){
           
              msg[i] = ('Z' - (('A' - (msg[i]-k))-1)); } //wrap to the end.
           else {
          
               msg[i] = (msg[i]-k); }   
          i++;
     }
     printf ("%s\n",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[i],a)){
            printf("%d",i);
         return (i+1); }
      else
         i++;
   }
   return 0;
}


CCNA, MCP, A+, N+

WIP: Masters of Infosec, CEH, & Mastering C
<<

mambru

Jr. Member
Jr. Member

Posts: 98

Joined: Wed Jun 03, 2009 3:11 pm

Post Tue Sep 15, 2009 8:11 pm

Re: Shift Cipher in C

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().
<<

gnix

Newbie
Newbie

Posts: 4

Joined: Sat Jun 13, 2009 11:43 pm

Post Wed Sep 16, 2009 9:29 pm

Re: Shift Cipher in C

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

Return to Programming

Who is online

Users browsing this forum: No registered users and 1 guest

cron
.
Powered by phpBB® Forum Software © phpBB Group.
Designed by ST Software