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

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

Re: Vigenerova šifra - C

Příspěvekod faraon » 23 zář 2017 20:05

Hm, kdybys používal jakýkoliv Unix nebo Linux, stačilo by do konzole napsat

Kód: Vybrat vše

man 3 isalpha

a dostal bys manuálovou stránku vybraného příkazu ve zvolené sekci.

Pro uživatele napodobeniny operačního systému je tu holt Google, do kterého stačí zadat úplně stejný dotaz a pak jít na první odkaz: https://linux.die.net/man/3/isalpha

Použití je úplně jednoduché. Pokud se zadaný znak vejde do rozsahu té funkce, vrátí TRUE, jinak FALSE. Takže
  • islower() = a..z
  • isupper() = A..Z
  • isdigit() = 0..9
  • isalpha() = a..z+A..Z neboli islower()+isupper()
  • isalnum() = a..z+A..Z+0..9 neboli isalpha()+isnum()
A stejně tak všechny další, klidně by sis je mohl napsat i sám, například:

Kód: Vybrat vše

int isupper(int znak)
    {
    if (znak<'A' || znak>'Z') return 0;
    return 1;
    }

Dokonce by to šlo ještě jednodušeji, definovat jako makro:

Kód: Vybrat vše

#define isupper(int znak) (znak>='A' && znak<='Z')

A vlastně se obejdeš i bez toho, prostě tam ten zvolený rozsah napiš přímo do podmínky :lol:
Naposledy upravil(a) faraon dne 24 zář 2017 07:40, 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)

Reklama
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 » 23 zář 2017 22:06

Tak jsem to nakonec pořešil takto:

Kód: Vybrat vše

                if(!isalpha((int) zprava[i]))
                    continue;
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: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Vigenerova šifra - C

Příspěvekod faraon » 24 zář 2017 07:39

Teď bys už měl mít vyřešená nepísmena v textu, a co v hesle? Pokud stejný text zašifruješ hesly PChelp a PC-HELP, měl bys dostat stejný výsledek, stejně jako bys to dělal ručně na papíru. Stane se to? Mysli nejenom na nepovolené znaky, ale také na malá/velká písmena!

Můžeš si dokonce vybrat z víc způsobů jak to ošetřit, buď to budeš provádět neustále dokola během šifrování, nebo heslo po načtení upravíš do správného tvaru a potom už nic neřešíš. Vzhledem k tomu že načítání provádíš na dvou místech programu úplně stejně, vyplatilo by se ho odsunout do vlastní funkce a řešit to tam, přesně z tohohle důvodu vznikly kdysi strašně dávno podprogramy ;-)
"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ů