Re: Vigenerova šifra - C
Napsal: 18 zář 2017 18:37
Také ne a navíc mohu zadat max. 100 znaků najednou protože tam mám char, takže bych musel postupně a když to chci přeložit tak nevím kde je chyba, ale přeloží to nějakou blbost..
Kód: Vybrat vše
ETVKC PBGUE DYTPG
PCHEL PPCHE LPPCH
PROGR AMENA SJENZ
Kód: Vybrat vše
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Kód: Vybrat vše
A: ABCDEFGHIJKLMNOPQRSTUVWXYZ (posun 0)
B: BCDEFGHIJKLMNOPQRSTUVWXYZA (posun 1)
Z: ZABCDEFGHIJKLMNOPQRSTUVWXY (posun 25)
Kód: Vybrat vše
if (islower((unsigned char)zprava[i])) {
hodnota = (((zprava[i]) - 'z') - ((heslo[j]) - 'z'));
}
if (isupper((unsigned char)message[i])) {
hodnota = (((zprava[i]) - 'A') - ((heslo[j]) - 'A'));
}
Kód: Vybrat vše
if (islower((unsigned char)zprava[i])) {
hodnota = (((zprava[i] - heslo[j]) + 26) % 26);
}
if (isupper((unsigned char)message[i])) {
hodnota = (((zprava[i] - heslo[j]) + 26) % 26);
}
Kód: Vybrat vše
programenasjenzjsivpametipozdravenobudjmenotveprijdoperacnisystemtvujbudvuleprikazutvychnatiskarnejakozjsounaobrazovcedatanasevezdejsidejznamdnesaodpustnamnasevstupniivystupnichybyjakozimyodpoustimevinikumsvadnymilogickymiobvodyneuvednasvezklamaniazbavnasnapetovychrazunebottvujjestalgoritmusiaplikaceiresenizacykleneaznavekyvekuvreturnn
Kód: Vybrat vše
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char **argv) {
char zprava[100];
int vyber;
int i, j;
char heslo[33];
int hodnota;
char opakovat = 1;
while (opakovat == 1) {
printf("Zadejte operaci\n");
printf("Sifrovat - 1 \n");
printf("Desifrovat - 2\n");
scanf("%d", &vyber);
if (vyber == 1) {
printf("Zadejte zprávu k zašifrování\n");
while (getchar() != '\n');
fgets(zprava, 100, stdin);
//printf("TEXT: ***%s***\n",zprava);
printf("Zadejte heslo\n");
scanf("%s", &heslo);
//printf("PASSWORD: ***%s***\n",heslo);
for (i = 0, j = 0; i < strlen(zprava); i++, j++) {
if (zprava[i] == ' ')
continue;
if (j >= strlen(heslo)) {
j = 0;
}
if (islower((unsigned char)zprava[i])) {
hodnota = (((zprava[i]) - 'a') + ((heslo[j]) - 'a'));
}
if (isupper((unsigned char)zprava[i])) {
hodnota = (((zprava[i]) - 'A') + ((heslo[j]) - 'a'));
}
printf("%c", 97 + (hodnota % 26));
}
printf("\nChcete opakovat? [1/0]\n");
scanf("%d", &opakovat);
}
else
if (vyber == 2) {
printf("Zadejte zprávu k dešifrování\n");
while (getchar() != '\n');
fgets(zprava, 100, stdin);
//printf("TEXT: ***%s***\n",zprava);
printf("Zadejte heslo\n");
scanf("%s", &heslo);
//printf("HESLO: ***%s***\n",heslo);
for (i = 0, j = 0; i < strlen(zprava); i++, j++) {
if (zprava[i] == ' ')
continue;
if (j >= strlen(heslo)) {
j = 0;
}
if (islower((unsigned char)zprava[i])) {
hodnota = (((zprava[i] - heslo[j]) + 26) % 26);
}
if (isupper((unsigned char)zprava[i])) {
hodnota = (((zprava[i] - heslo[j]) + 26) % 26);
}
if (hodnota < 0) {
hodnota = hodnota * -1;
}
printf("%c", 97 + (hodnota % 26));
}
printf("Chcete opakovat?? [1/0]\n");
scanf("%d", &opakovat);
}
}
return (EXIT_SUCCESS);
}
Kód: Vybrat vše
Zadejte zprávu k zašifrování
abc
TEXT: ***abc
***
STRLEN: ***4***
Kód: Vybrat vše
fgets()
Kód: Vybrat vše
while (getchar() != '\n');
Kód: Vybrat vše
if (zprava[i] == ' ')
continue;
Kód: Vybrat vše
Zadejte zprávu k zašifrování
qwe-rtz
Zadejte heslo
a
113 q 113 q
119 w 119 w
101 e 101 e
45 - 101 e
114 r 114 r
116 t 116 t
122 z 122 z
10 \n 122 z
Kód: Vybrat vše
if isalpha()... else