Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

[70-536, #24] Un esempio pratico sulla generazione di hash sulle stringhe

La mia reputazione sta colando a picco, dopo il mio breve racconto sul byte innamorato.  Mi devo riprendere subito, ed alla svelta, anche! Riprendo quindi la mia serie di post sull'esame 70-536 continuando il discorso sulle classi di crittografia messe a disposizione da .NET. Nell'ultimo post avevo fatto vedere qualche riga di codice per utilizzare la classe HashAlgorithm allo scopo di generare l'hash value di una stringa, secondo diversi provider (SHA256, SHA384, SHA512, etc.).

Giusto per fare qualche test, ho scritto una piccola applicazione che prende in input una stringa da una TextBox, ne calcola l'hash con i vari provider .NET, e ne visualizza l'output su un'altra TextBox. L'interfaccia è molto semplice e spartana. Prima di parlare dell'interfaccia in sè, voglio farvi vedere la classe HashString, così come era stata scritta l'ultima volta, e come la useremo oggi.

public class HashString
{
    
public static byte[] HashStringa(string contents, string shaMethod)
    {
        HashAlgorithm algo = HashAlgorithm.Create(shaMethod);
        
// converto la stringa in byte[]
        
byte[] buffer = Encoding.Unicode.GetBytes(contents);
        
// calcolo l'hash
        
byte[] hash = algo.ComputeHash(buffer);
        
// ritorno il byte[] che contiene l'hash
        
return (hash);
    }
}

Il metodo statico HashStringa accetta due parametri: la stringa contents di cui calcolare l'hash ed un'altra stringa shaMethod che contiene il nome della classe da usare per calcolare l'hash value. La variabile shaMethod viene passata al costruttore statico Create della classe HashAlgorithm. Il metodo, infine, ritorna un byte[] contenente l'hash value: da notare che la lunghezza di questo array varia a seconda del tipo di hash che abbiamo calcolato. Maggiori dettagli li trovate nel mio post precedente.

L'interfaccia comprende un solo Windows Form, con i seguenti oggetti:

  • una TextBox txtInput
  • una TextBox txtOutput
  • una ComboBox cmbHashMethod
  • un Buttom btnGet

La ComboBox viene inizializzata durante il Load della WF, con il seguente codice:

private void FormMain_Load(object sender, EventArgs e)
{
    
string[] hashes = { "SHA1", "SHA256", "SHA384", "SHA512", "MD5" };
    
this.cmbHashMethod.DataSource = hashes;
}

Dichiaro un array, ed usando un semplice data-binding popolo la ComboBox. L'altro evento che ho gestito è il Click del Button, per sfruttare la classe HashString indicata prima:

private void btnGet_Click(object sender, EventArgs e)
{
    
if (this.txtInput.Text == string.Empty) return;
    
if (this.cmbHashMethod.SelectedItem == nullreturn;

    
string sha = (string)this.cmbHashMethod.SelectedItem;
    System.Text.Encoding enc = System.Text.Encoding.UTF8;
    
byte[] ret = HashString.HashStringa(this.txtInput.Text, sha);

    
this.txtOutput.Text = enc.GetString(ret);
}

Innanzitutto, controllo che l'utente abbia scritto qualcosa in txtInput e che abbia selezionato una classe nella cmbHashMethod. Calcolo l'hash e ne visualizzo il valore in txtOutput. Ho utilizzato la classe Encoding per trasformare un byte[] in una stringa in chiaro.

A cosa serve calcolare l'hash di un oggetto?
Alcuni via e-mail, o tramite la Contact Form del mio blog, mi hanno chiesto lo scopo di calcolare un hash value se non posso tornare indietro al contenuto iniziale. Attenzione: stiamo parlando di cose diverse! L'hash value serve ad esempio per verificare che il risultato di una trasmissione sia avvenuto correttamente. Mi spiego meglio. Supponiamo di avere un server Web con su Linux, e di mettere a disposizione su questo server il documento Migrate_To_Windows.pdf. Supponiamo che l'hash value di questo file sia un certo valore xyz. Ora, voi con IE navigate su quel sito, scaricate il documento e provate a controllare l'hash value del file. Se ottenete xyz, siete molto ragionevolmente sicuri che il documento scaricato è identico all'originale. Se ottenete un valore diverso da xyz, allora qualcosa non è andato bene ed i due documenti sono diversi. Ricordate infatti che è sufficiente anche una piccola differenza, per avere un hash value completamente diverso.

Oppure, ancora, lo spiega molto bene anche Alessio in questo post. Per evitare di memorizzare una password in plaintext, ne viene memorizzato soltanto il suo hash value, che poi verrà confrontato con l'hash value calcolato dalla password inserita dall'utente in fase di login.

Quello che mi avete chiesto via e-mail è la vera e propria crittografia, ovvero: prendere un messaggio, criptarlo con una chiave privata, ottenere un messaggio codificato e trasmettere quello. Il ricevente potrà decodificare il messaggio con la chiave pubblica e risalire di conseguenza al messaggio originario. Questo sarà il tema dei miei prossimi post, considerando che preferisco non scendere troppo nella teoria (non ne sarei in grado, e soprattutto c'è qualcun altro che lo fa meglio di me ), ma vedere esempi pratici direttamente con le classi esposte dal FX2.0. Alla prossima, allora!

powered by IMHO 1.2

Print | posted on lunedì 13 marzo 2006 14:59 | Filed Under [ Esame 70-536 ]

Feedback

Gravatar

# re: [70-536, #24] Un esempio pratico sulla generazione di hash sulle stringhe

http://www.chicas-saxy.moekpe16.info vecchie italiane troie http://www.video-masturbazione-figa.eroop16.info trans brescia http://www.amatoriale-segretarie.loekpe16.info collant rotte http://www.cristina-orsi-nuda.koekpe16.info spears mostra figa http://www.donne-incinte-focose.noekpe16.info fighette tgp
28/12/2006 20:08 | aka
Gravatar

# Zoloft.

Zoloft. Zoloft muscular side effects.
02/06/2009 06:55 | Zoloft withdrawal symptoms.
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET