Vigenerova šifra - C

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

popcorn
Level 3
Level 3
Příspěvky: 525
Registrován: červenec 16
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod popcorn » 17 zář 2017 15:22

Tak ani

Kód: Vybrat vše

 fgets (zprava, 100, stdin);
 while (getchar() != 'n');

Tu zprávu nenačte.. viz. obrázek
zde.png
zde.png (5.17 KiB) Zobrazeno 576 x


Dodatečně přidáno po 3 minutách 17 vteřinách:
Tak když jsem tam zase dal

Kód: Vybrat vše

  printf("Zadejte zprávu k zašifrovánín");
scanf("%s", &zprava);
while (getchar() != 'n');
printf("TEXT: ***%s***n",zprava);

Tak jsme se posunuli podstatně dál než s fgets
scanf-output.png
scanf-output.png (5.27 KiB) Zobrazeno 576 x
CPU: i5-6500 GPU: Msi RX480 8GB RAM: Crucial 2x8GB MB: MSI B150 PSU: Seasonic S12II-520 CASE: Gladius M35

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod faraon » 17 zář 2017 15:34

Ten buffer musíš vyprázdnit PŘED fgets()!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

popcorn
Level 3
Level 3
Příspěvky: 525
Registrován: červenec 16
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod popcorn » 17 zář 2017 15:43

Ježiši já hlupák, teď ale se mi smazali všechny mezery ve zprávě i když tam mám funkci

Kód: Vybrat vše

  if (zprava[i] == ' ')
            continue;

Takže pokud tam je mezera mělo by jí to přeskočit a šifrovat dál.
output.png
output.png (5.77 KiB) Zobrazeno 573 x
CPU: i5-6500 GPU: Msi RX480 8GB RAM: Crucial 2x8GB MB: MSI B150 PSU: Seasonic S12II-520 CASE: Gladius M35

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod faraon » 17 zář 2017 15:48

Ale to je správně, ne? Běžně se mezery vynechávaly, takže ruční šifrování probíhalo takhle:

Kód: Vybrat vše

Ahojjaksemas
hesloheslohe

Aspoň v šestnáctém století, kdy tahle šifra vznikla, to platilo :lol:
Naposledy upravil(a) faraon dne 17 zář 2017 15:50, celkem upraveno 1 x.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

popcorn
Level 3
Level 3
Příspěvky: 525
Registrován: červenec 16
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod popcorn » 17 zář 2017 15:49

To máš pravdu, tak bych to mohl nechat, ale když to budu chtít rozšifrovat, tak pro lepší přehlednost by ty mezery byly možná lepší
CPU: i5-6500 GPU: Msi RX480 8GB RAM: Crucial 2x8GB MB: MSI B150 PSU: Seasonic S12II-520 CASE: Gladius M35

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod faraon » 17 zář 2017 16:00

Pro lepší přehlednost se šifrovaný text seskupoval například po pěti písmenech, takže by vypadal třeba takhle:
XNPZQ ATBFB JHKEN JAPCL WOOYA XDUFI UKZIV KNRQL DSEZI SMXSI GE
Snižuje to pravděpodobnost chyby šifranta při přepisování. Ono i vynechání jednoho písmene může mít dost nepříjemné následky...

Navíc mezery v textu oslabují šifru, protože krátká slova se dají uhodnout a luštitel tak získá část klíče!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

popcorn
Level 3
Level 3
Příspěvky: 525
Registrován: červenec 16
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod popcorn » 17 zář 2017 16:02

A ještě musim mít někde chybu v zašifrovací funkci, protože slovo "Ahoj" s heslem "b" by to mělo zašifrovat na bipk, ale mě to zašifruje na jkrmM. Nechápu proč je na konci to M..
output2.png
output2.png (4.68 KiB) Zobrazeno 567 x
CPU: i5-6500 GPU: Msi RX480 8GB RAM: Crucial 2x8GB MB: MSI B150 PSU: Seasonic S12II-520 CASE: Gladius M35

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod faraon » 17 zář 2017 16:14

faraon píše:Nebo jakýkoliv jiný znak který není malé písmeno???

To 'M' bude asi ten '\n' na konci :lol:

Někde tam máš chybu v počítání, určitě je tohle přesně to co chceš udělat?

Kód: Vybrat vše

       if (!isupper(zprava[i]))
       {
        hodnota = ((zprava[i]) - 96) + (heslo[j] - 96);
       }
   
       if (!islower(zprava[i]))     
       {
         hodnota = ((zprava[i]) - 64) + (heslo[j] - 64);   
       }

   printf("%c", 97 + (hodnota % 26));
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

popcorn
Level 3
Level 3
Příspěvky: 525
Registrován: červenec 16
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod popcorn » 17 zář 2017 16:29

Už to mám, o jeden znak jsem to měl posunutý blbě

Kód: Vybrat vše

if (!isupper(zprava[i]))
       {
        hodnota = (((zprava[i]) - 97) + ((heslo[j]) - 97));
       }
   
       if (!islower(zprava[i]))     
       {
         hodnota = (((zprava[i]) - 65) + ((heslo[j]) - 65));   
       }

        printf("%c", 97+ (hodnota % 26));
CPU: i5-6500 GPU: Msi RX480 8GB RAM: Crucial 2x8GB MB: MSI B150 PSU: Seasonic S12II-520 CASE: Gladius M35

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod faraon » 17 zář 2017 21:07

Tak schválně, jestli se mezi sebou dorozumíme:

Kód: Vybrat vše

ETVKC PBGUE DYTPG NDXKR HQPIX RVDOG PXLRZ QJFQQ PCDVC IAGXL KSATG CJRTH NUAIX IKWQF FSKWS IAGXM HDFIK AJLYP IKZOL GCGQE VDOLZ SFCPQ IVLOD XJIOP ICUED TKGGH PYHKK IUOCC THYTH CVHAJ HVUEX CPULZ DIJRU MTKNU AYACX EOCMN YCRSK XBAVH ADJUA MXTKK UMVJB UCEOC NOPPZ VXERC XXDDC SONCG BZPSC CZZPO ZNHQL CXCGF LKCCZ RLETV VZJRW THDFC TDVXE KJLQI DIPNN SCXIO BWTPE NPOLR TKYID TCKGE NNZNL RPPOP HZPZN XLOFK GGAYC C

Heslo je PC-HELP. Nekontroloval jsem to ručním šifrováním, takže doufám že v mém programu nemám nějakou botu 8)
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

popcorn
Level 3
Level 3
Příspěvky: 525
Registrován: červenec 16
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod popcorn » 18 zář 2017 16:19

Hm... Mám pocit, že mě v hesle nebude fungovat '-'. Protože mi to rozluští náhodné znaky..
CPU: i5-6500 GPU: Msi RX480 8GB RAM: Crucial 2x8GB MB: MSI B150 PSU: Seasonic S12II-520 CASE: Gladius M35

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod faraon » 18 zář 2017 17:10

A když ho zadáš bez pomlčky? Já jsem to načítání udělal tak že se všechny neplatné znaky rovnou zahodí a malá písmena převedou na velká, takže pracuji pouze s A..Z.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů