2025(e)ko otsailaren 19(a), asteazkena

Ariketa 34 | Zesar zifratze-sistema

ZER DAKIDAN:
Karaktereen char datu-mota ezagutzen dut eta karaktereak ASCII taularen arabera sailkatzen direla dakit.



ZER IKASIKO DUDAN:
char datu-motako aldagai bat teklatuz irakurri ondoren, Zesar zifratze-metodoa erabiliz karaktere zifratua nola lor daitekeen ikasiko dut.

Kriptografian, Zesarren zifratze-sistema (edo Zesar zifratzea) mezuak enkriptatzeko teknikarik zaharrenetarikoa da, baita erabilienetako bat ere. Metodo honek Julio Zesar ospetsuaren ohorean dauka izena, zeinek bere jeneralekin komunikatzeko erabiltzen zuen.

Ordezkatze-metodo bat da, non hasierako mezuaren letra bakoitza beste letra batengatik ordezkatzen den: Alfabetoan 3 posizio aurrerago dagoen letrarengatik. Horrela, A letra D letra bihurtuko litzateke, B-a E etab.




Programa honek Zesar zifratzea delako enkriptazio teknika erakusten du, alfabeto larrien letra bat eman eta programak bere karaktere zifratua erakutsiko du (ASCII taulako 3 posizio aurrerago dagoena). Adibidez, A sartzean emaitza D izango da, B sartzean emaitza E izango da, X sartzean emaitza A izango da, Y sartzean emaitza B izango da eta Z sartzean emaitza C izango da:

Zesar zifratzea programaren lehen bertsioan switch agindu bat erabiltzen da datua den alfabeto larrien letra zifratzeko:

/* Ariketa-34a_ZesarZifratzeSistema: Zesarren zifratze-sistema */

// Zesar zifratze-teknikan letra bakoitzaren desplazamendua 3 da. Karaktere bat
// sartu eta switch agindu bati esker bere karaktere desplazatua lortuko da.

#include <stdio.h>
#define iDESPLAZAMENDUA 3

int main()
{
    char cDatua;
    char cEmaitza;

    printf("\n");
    do
    {
        printf("Zifratu nahi den karakterea sartu (A eta Z artekoa): ");
        scanf("%c", &cDatua);
        fflush(stdin);
    } while (cDatua < 'A' || cDatua > 'Z');

    switch(cDatua)
    {
     case 'Z': cEmaitza = 'C';
               break;
     case 'Y': cEmaitza = 'B';
               break;
     case 'X': cEmaitza = 'A';
               break;
     default:  // sartzen da cDatua ez denean: X, Y edo Z
               cEmaitza = cDatua + iDESPLAZAMENDUA;
    }
    printf("\t%c >>> %c\n", cDatua, cEmaitza);

    return 0;
}




Alfabeto larrien letra bat zifratzeko datuari +3 egingo zaio. Alfabetoaren zerrenda zirkular bat osatuko da, zerrendaren oinarria A karakterea da eta alfabetoak 26 letra dituenez zatiketa osoaren hondarraz lortzen dira karaktereen emaitza zifratuak.

Zesar zifratzea programaren bigarren bertsioan A-Z alfabetoaren zerrenda zirkular bat osatuko da:

/* Ariketa-34b_ZesarZifratzeSistema: Zesarren zifratze-sistema */

// Zesar zifratze-teknikan letra bakoitzaren desplazamendua 3 da. Baina
// programa honek desplazamenduaren neurria hautatzeko aukera ematen du.
// Alfabetoaren zerrenda zirkular bat osatuz, desplazamendua finkatu eta
// datua den letra bati dagokion karaktere desplazatua lortuko da.

#include <stdio.h>

int main()
{
    char cDatua;
    char cEmaitza;
    int iDesplazamendua;

    printf("\n");
    printf("         1         2     2\n");
    printf("12345678901234567890123456\n");
    printf("ABCDEFGHIJKLMNOPQRSTUVWXYZ    26 karaktere\n\n");

    do
    {
        printf("Zifratu nahi den karakterea sartu (A eta Z artekoa): ");
        scanf("%c", &cDatua);
        fflush(stdin);
    } while (cDatua < 'A' || cDatua > 'Z');

    printf("Enkriptatze-gakoa sartu (kopuru oso bat): ");
    scanf("%d", &iDesplazamendua);
    if (iDesplazamendua < 0)  // gako negatiboa bada positibo jarri
        iDesplazamendua = iDesplazamendua * (-1);

    cEmaitza = (cDatua - 'A' + iDesplazamendua) % 26 + 'A';
    printf("\t%c >>> %c\n", cDatua, cEmaitza);

    return 0;
}

Argi dago azken programa hau aurrekoa baino ahaltsuagoa dela. Izan ere, desplazamendua beti 3 izan beharrean teklatuz irakurtzen den balio bat baita. Aurrerago erakutsiko den Ariketa 49 | Zesar zifratze-sistema artikuluan mezu osoak enkriptatzen eta desenkriptatzen ikasiko dugu.







  • Ariketa-34a_ZesarZifratzeSistema.cbp | main.c  
  • Ariketa-34b_ZesarZifratzeSistema.cbp | main.c  


 

iruzkinik ez:

Argitaratu iruzkina