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 2
Level 2
Příspěvky: 239
Registrován: červenec 16
Pohlaví: Muž

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


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
Nemáte oprávnění prohlížet přiložené soubory.


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
Master Level 8
Příspěvky: 5968
Registrován: prosinec 10
Pohlaví: Muž

Re: Vigenerova šifra - C

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

Ten buffer musíš vyprázdnit PŘED fgets()!
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

popcorn
Level 2
Level 2
Příspěvky: 239
Registrován: červenec 16
Pohlaví: Muž

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
Nemáte oprávnění prohlížet přiložené soubory.
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
Master Level 8
Příspěvky: 5968
Registrován: prosinec 10
Pohlaví: Muž

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.
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

popcorn
Level 2
Level 2
Příspěvky: 239
Registrován: červenec 16
Pohlaví: Muž

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
Master Level 8
Příspěvky: 5968
Registrován: prosinec 10
Pohlaví: Muž

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!
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

popcorn
Level 2
Level 2
Příspěvky: 239
Registrován: červenec 16
Pohlaví: Muž

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
Nemáte oprávnění prohlížet přiložené soubory.
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
Master Level 8
Příspěvky: 5968
Registrován: prosinec 10
Pohlaví: Muž

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));
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

popcorn
Level 2
Level 2
Příspěvky: 239
Registrován: červenec 16
Pohlaví: Muž

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
Master Level 8
Příspěvky: 5968
Registrován: prosinec 10
Pohlaví: Muž

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)
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

popcorn
Level 2
Level 2
Příspěvky: 239
Registrován: červenec 16
Pohlaví: Muž

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
Master Level 8
Příspěvky: 5968
Registrován: prosinec 10
Pohlaví: Muž

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.
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.


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

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 1 host