-
Notifications
You must be signed in to change notification settings - Fork 0
/
VigenereCipher.c
98 lines (94 loc) · 2.52 KB
/
VigenereCipher.c
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MARIME 13501
void criptare(char sir1[], char sir2[], int n)
{
int i,j,a;
for (i=0; i<n; i++)
{
if ((sir1[i]<='z')&&(sir1[i]>='a'))
a=sir1[i]-'a';
else
/* Daca este litera mare trebuie sa adaugam si
diferenta intre literele A si a */
if ((sir1[i]<='Z')&&(sir1[i]>='A'))
a=sir1[i]-'A'+26;
j=0;
while (j<a)
{
/* Avansam cu cate 1 si daca este caracterul
imediat urmator dupa z, vom ajunge la A si daca
este caracterul imediat urmator dupa Z, ajungem la a */
sir2[i]=sir2[i]+1;
if (sir2[i]=='[') sir2[i]='a';
else if (sir2[i]=='{') sir2[i]='A';
j++;
}
}
}
void prelungire (char sir1[], int rep, int r,int m)
{
int i=0,j;
char sir3[MARIME];
strcpy(sir3,sir1);
while (i<rep-1)
{
strcat(sir1,sir3);
i++;
}
i=strlen(sir1);
for (j=0; j<r; j++)
{
sir1[i]=sir1[i-m];
i++;
}
sir1[i]='\0';
}
int verificare (char s1[], char s2[], int lung1, int lung2)
{
int i,all_letters=1,char_letter=1;
// In all_letters vom retine daca toate caracterele sunt litere
// In char_letter vom retine daca caracterul curent este litera
for (i=0; i<lung2; i++)
{
if ((s2[i]>='a')&&(s2[i]<='z')) char_letter=1;
else if ((s2[i]>='A')&&(s2[i]<='Z')) char_letter=1;
else char_letter=0;
if (char_letter==0) all_letters=0;
}
for (i=0; i<lung1; i++)
{
if ((s1[i]>='a')&&(s1[i]<='z')) char_letter=1;
else if ((s1[i]>='A')&&(s1[i]<='Z')) char_letter=1;
else char_letter=0;
if (char_letter==0) all_letters=0;
}
return all_letters;
}
int main()
{
int n,m,repetitie,rest,ver;
char cheie[MARIME],text[MARIME];
scanf("%s",cheie);
cheie[strlen(cheie)]='\0';
scanf("%s",text);
text[strlen(text)]='\0';
n=strlen(text);
m=strlen(cheie);
// Verificam daca toate caracterele sunt litere
ver=verificare(cheie,text,m,n);
if (ver==1)
{
rest=n%m;
repetitie=n/m;
prelungire(cheie,repetitie,rest,m);
// Criptam textul
criptare(cheie,text,n);
printf("%s\n",text);
}
else
// Daca nu toate caracterele sunt litere afisam INVALID
printf("INVALID\n");
return 0;
}