Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

raliis / IAX0584

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Members
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Switch branch/tag
  • IAX0584
  • week1
  • krypto.c
Find file
BlameHistoryPermalink
  • raliis's avatar
    Replace krypto.c · fb76482a
    raliis committed 7 years ago
    fb76482a
krypto.c 2.56 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
/**
 * File: krypto.c
 * Author: Rainer Liis
 * Created: 29.01.2018
 * Last edit: 31.01.2018
 * 
 * Descrption: Encryption and decryption of text using caesar cipher.
 * 				Input from text file and output to a text file.
 * 				Encryption counts up, decryption counts down.
 */

#include <stdio.h>

void encrypt ();
void decrypt ();

int main (void)
{
	char valik;

	printf ("Do you wish to encrypt or decrypt?\n");

	// user enters choice

	do
	{
		printf ("Please enter a valid option(e/d):");
		scanf ("%c", &valik);
	} 
	while (valik != 'e' && valik != 'd');

	//depending on the choice, a function is started

	if (valik == 'e')
	{
		encrypt ();
	}
	else if (valik == 'd')
	{
		decrypt ();
	}
	else
	{
		printf ("option does not exist"); // if input is not one of
	}									  // the choices

	return 0;
}

void encrypt ()
{
	char ni[80] = "sisend.txt", no[80] = "tul.txt";
	char c;
	int key;
	int caesar;

	FILE *fi, *fo;
	fi = fopen (ni, "r");
	fo = fopen (no, "w");

	printf ("Enter the encryption key to encrypt: ");
	scanf ("%d", &key);

	key = key % 26; // in case the key is too large

	do
	{
		c = fgetc(fi);

		if (feof(fi)) // loop breaks when fgetc reaches end of file
		{
			break;
		}

        if (c == 32) // if c is space
        {
            caesar = 32;
        }
		if (c >= 65 && c <= 90) // if char is uppercase
		{ 
			if ((c + key) > 90)
			{
				caesar = c - (26 - key);
			}
			else
			{
				caesar = (int)c + key;
			}
		}
		else if (c >= 97 && c <= 122) // if char is lowercase
		{
			if ((c + key) > 122)
			{
				caesar = c - (26 - key);
			}
			else
			{
				caesar = (int)c + key;
			}
		}

		printf ("%c", caesar);
		fprintf (fo, "%c", caesar);
	}
	while (1);

	printf (" \n");
}

void decrypt ()
{
	char ni[80] = "sisend.txt", no[80] = "tul.txt";
	char c;
	int key;
	int caesar;

	FILE *fi, *fo;
	fi = fopen (ni, "r");
	fo = fopen (no, "w");

	printf("Enter the encryption key to decrypt: ");
	scanf ("%d", &key);

	key = key % 26; // in case the key is too large

	do
	{
		c = fgetc(fi);

		if (feof(fi)) // loop breaks when fgetc reaches end of file
		{
			break;
		}

        if (c == 32)
        {
            caesar = 32; // if c is space
        }
		if (c >= 65 && c <= 90) // if char is uppercase
		{ 
			if ((c - key) < 65)
			{
				caesar = c + (26 - key);
			}
			else
			{
				caesar = (int)c - key;
			}
		}
		else if (c >= 97 && c <= 122) // if char is lowercase
		{
			if ((c - key) < 97)
			{
				caesar = c + (26 - key);
			}
			else
			{
				caesar = (int)c - key;
			}
		}

		printf ("%c", caesar);
		fprintf (fo, "%c", caesar);
	}
	while (1);

	printf (" \n");
}