Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    Creare una semplice funzione di criptazione

    Ci credo che nessuno ha risposto al mio quesito sugli utenti, ho postato 09384 domande in un solo post salassandovi contro ogni regolamento! Scusate in anticipo, ora pongo un quesito per volta con molta, molta calma! (scusate l'entusiasmo!).

    Per gli utilizzi più comuni (es gestione delle password di più utenti su un software gestionale per piccole imprese) è sufficiente crearmi per conto mio una piccola classe di criptazione, ad esempio per inserire le password dei suddetti utenti in una tabella del database, convertendo magari le lettere in numeri e poi sottoponendo questi numeri a vari calcoli? O è indispensabile secondo voi ricorrere a più complessi blocchi di codice di terze parti, o disponibili on line, o in alternativa utilizzare le funzioni di protezione di Sql Server 2005 (con le quali, ahi, ahi, ho poca dimestichezza!)? In effetti chi si metterebbe a forzare una password tentando di interpretarla e decriptarla potrebbe essere comunque determinato al punto di voler manomettere anche sistemi più complessi!

  2. #2
    Di solito in questi casi si usano gli algoritmi di hashing (crittografia non reversibile) come il noto MD5... quando viene impostata la password ne viene ricavato l'hash che viene memorizzato nel DB. Quindi, al momento del login, viene generato l'hash della password inserita, confrontato con quello memorizzato nel DB e, se coincidono, si consente l'accesso. Molti linguaggi di programmazione includono nelle loro librerie funzioni di hashing robuste e ben collaudate, per cui ti consiglio di usare quelle al posto di un algoritmo di tua creazione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Credo che la prossima volta in cui mi darai consigli così utili dovro aspettarmi anche la fattura a domicilio... Scherzo!

    Grazie!! Ho cercato subito su Google come da tuoi consigli ed ho trovato la routine che ti copio sotto, semplice e breve, che tra l'altro utilizza un namespace già presente in c#!! Ti sembra buona? Io sono un pò perplesso, tu mi consigliavi una chiave asimmetrica ed invece mi pare di capire che questa sia simmetrica! Conosci questo sistema '3DES'?

    Shadow


    _______________________________________


    using System;
    using System.Text;
    using System.Security.Cryptography;

    private string TripleDESEncrypt(string sTextToEncrypt, string sKey) {

    TripleDESCryptoServiceProvider crypto3DES = new TripleDESCryptoServiceProvider();
    MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();

    // imposto la chiave per l'algoritmo 3DES
    crypto3DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(s Key));
    // imposto modalità di cifratura Electronic Codebook (ECB)
    crypto3DES.Mode = CipherMode.ECB;
    // ottengo interfaccia per la cifratura simmetrica
    ICryptoTransform cryptoTransform = crypto3DES.CreateEncryptor();

    try {
    byte[] bytBuffer = ASCIIEncoding.ASCII.GetBytes(sTextToEncrypt);
    // applico algoritmo di cifratura
    return(Convert.ToBase64String(cryptoTransform.Tran sformFinalBlock
    (bytBuffer, 0, bytBuffer.Length)));

    } catch (Exception exCrypto) {
    return(exCrypto.Message);
    }
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... c'e' un attimo di confusione ...

    MItaly ti aveva detto che AL POSTO della criptazione, in questi casi si usa un hash.

    Quindi, a te puo' bastare questa parte

    codice:
    MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
    
    crypto3DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(sKey));
    per creare l'hash della password e non per criptarla in seguito con il "Triplo DES" (un algoritmo complesso, anche se non ottimale, e comunque non necessario nel tuo caso).

    Ti consiglio di leggere qualcosa su MD5 ...

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Ma così è semplicissimo, direi che ho risolto! Grazie infinite anche a te, Oregon. Tornando a noi, oggi alla Feltrinelli ho 'razziato' due libri (C#2005 - Hoepli e Sql Server 2005 - Mondadori, come vedete ce la sto mettendo proprio tutta!) ed ho visto che anche Sql Server offre una sua non meglio capita (dal sottoscritto!) criptazione 'interna' di dati. Per le mie necessità secondo voi quale soluzione è migliore? Spero mi rispondiate che mi basti l'hash, perché con Sql Server 2005 non ho ancora tantissima dimestichezza mentre invece con le vostre spiegazioni ho capito l'hash al volo!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Ah, una cosa importante: la chiave così ottenuta di che tipo è? Ovvero, in che modo la devo trattare sia nella mia applicazione che nelle tabelle del database? E' una semplice string oppure ha un tipo specifico tutto suo? Grazie di nuovo a tutti e due.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La funzionalita' di criptazione dei dati di SQL va MOLTO oltre quello che ti serve. Quindi per te l'hash della pwd va benissimo.

    Fra l'altro, una non esatta gestione della criptazione con SQL, potrebbe facilmente portare alla completa perdita dei dati con minime possibilita' di recuperarli ...

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Sei stato davvero molto chiaro, ora non ho dubbi seguirò il tuo consiglio. La chiave così ottenuta può essere considerata un tipo 'string' qualsiasi oppure esiste un tipo particolare tutto suo? Te lo chiedo in particolare per capire di che tipo dovrà essere il campo destinato a contenerla.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' un array di byte ...

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    ah ok...

    quindi tra i tipi disponibili in c# devo scegliere 'array' (correggimi se ho detto una cavolata!) invece tra i tipi di campo disponibile in Sql Server quale dovrò scegliere per il campo che dovrà ospitare questa chiave?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.