Skip navigation

Nell’era di internet le password (intendo codici chiave che ci permettono di autenticarci e proteggere informazioni, servizi ecc..) sono entrate prepotentemente nelle nostre vite. Giusto l’altro giorno ho dovuto trascriverne alcune perchè non riuscito a ricordarle tutte (e beh a dire la verità ho riempito completamente un foglio A4).

Ma ricordarle e archiviarle non è l’unico problema legato alle chiavi (o password, come preferite), bisogna anche inventarsele. Ci si aggrappa a tutto pur di inventarsi una password che non sia banale e magari anche facilmente ricordabile: per esempio mi è capitato di utilizzare il nome del modello del mio stereo (che era anche buona come password: conteneva sia lettere maiuscole e minuscole, che simboli per esempio il ‘–‘ ).

Altri utilizzano il ritornello della loro canzone preferita per poter generare una password abbastanza lunga da essere abbastanza sicura: ‘ Lucy in the Sky with Diamondssenza un dizionario che contiene questa frase esatta è quasi “in-crackabile” (molto sicura). Tenendo a mente sempre la stessa frase si potrebbe considerare solo le prime due lettere di ogni parola e di avrebbe una password del genere ‘ LuinthSkwiDi’ che ha anche lei la sua bella complessità anche senza contenere caratteri speciali ne numeri. (una password non è più sicura solo quanto più è lunga, ma anche quanti più tipi di caratteri contiene, spesso ci è infatti consigliato di utilizzare sia numeri sia lettere (MAIUSCOLE e minuscole) e quando è possibile anche caratteri speciali ‘ &%$£!= ‘).

Potremmo anche non volere una password che sia facile da ricordare, potremmo non aver fantasia e volere una chiave particolare senza stare a battere le dita sulla tastiera in modo casuale (questo metodo non l’ho ancora provato, ma è interessante! °.°). Quindi veniamo a quello promesso dal titolo: un programmino molto banale scritto in c++ che generi una password lunga quanto vogliamo e con un livello di complessità definito da noi.

Ecco che con questo pensiero in testa, con tutte le cose che avevo da fare oggi mi sono messo davanti all’IDE Code::blocks e ho incominciato a scrivere il programma.

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

int main (){
int n;
char c;
int risp,i,scelta;

do{
    srand(time(NULL));
    cout<<"\tGENEREATORE CHIAVI CASUALI \t ** il Katta **"
        <<"\n\t\tMenu:"
        <<"\n 1-chiave alfanumerica con caratteri speciali"
        <<"\n 2-solo nuemeri"
        <<"\n 3-numeri e lettere maiuscole e minuscole"
        <<"\n 4-lettere minuscole"
        <<"\n 5-lettere maiuscole e minuscole (utile per chiavi di cifratura WPA e WEP)"
        <<"\n 0-esci\n_";
    cin>>scelta;

    switch (scelta){

    case 1:                             //chaive alfanumerica + caratteri speciali
        cout<<"\nlunghezza chiave:\n_";
        cin>>n;
        for (i=0;i<n;i++){
            c=33+rand() % 94;           //il codice ASCII è visto dal C codificato
                                                     //nella sua forma decimale
            cout<<c;                  /* tutti i caratteri che interessano
                                       * questa chiave sono tra il 33 e il 126
                                       * in pratica genero semplicemente dei
                                       * numeri interi che poi verranno
                                       * codificati assegnandoli a una
                                       * variabile di tipo ' char '*/
        }
        do{getchar();}while(!getchar());
        break;

    case 2:                             //chiave numerica
        cout<<"\nlunghezza chiave:\n_";
        cin>>n;
        cout<<"\n chiave:\n";
        for (i=0;i<n;i++){
            cout<<rand()%10;
        }
        do{getchar();}while(!getchar());
        break;

    case 3:;case 4:;case 5:               //gli altri tre casi raggruppati
        cout<<"\nlunghezza chiave:\n_";      /* in questi 3 casi la funzione rand genererà
                                              * molti più numeri di quelli che verranno utilizzati.*/
       /* Questo è quello che si definisce un programma non ottimizzato. */
        cin>>n;
        cout<<"\n chaive: \n";
        i=0;
        while (i<n){
               c=33+rand() % 93;
 if(scelta==3){                  //chiave alfanumerica
 if ((c>=48 && c<=57)||(c>=65 && c<=90) || (c>=97 && c<=122)){
//con questo 'if' si stampa a video solo se il numero generato è tra quelli che interessano il tipo di chiave
//in ASCII dal 48 al 57 rappresentano i numeri, dal 65 al 90 l'alfabeto maiuscolo e dal 97 al 122 le lettere in minuscolo
                    cout<<c;
                    i++;
                }
            }
            if (scelta==4){                   //solo lettere dell'alfabeto
                if (c>=97 && c<=122){
                    cout<<c;
                    i++;
                }
            }
            if (scelta==5){                   //lettere maiuscole e minuscole
                if ((c>=65 && c<=90) || (c>=97 && c<=122)){
                    cout<<c;
                    i++;
                }
            }
        }
        do{getchar();}while(!getchar());
        break;
    }
}while(scelta!=0);
return 0;
}

Il tutto restituisce a video la chiave di lunghezza desiderata, bisogna premere invio dopo ogni visualizzazione (il ‘ do{getchar();}while(!getchar()); ‘ serve a quello , utilizzato per poter compilare il programma con diversi sistemi operativi).

Il programma è scritto molto “di getto”. Con i ‘ case ‘ abbastanza incasinati (ero indeciso tra gli if e lo swicht)

comunque:
il sorgente è scaricabile qui generatore_pswrd.cpp

l’eseguibile  per linux quo generatore_pswrd

e invece il file eseguibile per windows qua generatore_pswrd.exe

Annunci

2 Comments

  1. ciao mi daresti il tuo indirizzo msn o skype che mi servirebbe il tuo aiuto grazie infinite 🙂

  2. Now that I’ve just devoted six hours on your website reading your posts, I’m absolutely hooked on your blog.
    I bookmarked it as well so that I can keep up with it on a regular
    basis. Take a look at my blog also and tell me how you feel.


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: