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 desplazamendua ez da balio konstantea izango. Aurreko bertsioan iDESPLAZAMENDUA balio konstantea delako posible izan da switch agindua erabili, baina desplazamendua aukeragarria denean A-Z alfabetoaren zerrenda zirkular bat osatu beharko 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