320 messaggi dal 12 gennaio 2007
Non posso metterlo solo varchar,perchè potrei superare i 4.000 cartteri.
Grazie

Massimo Sanfelici

Mantova
varchar(max) è varchar, di fatto. quindi non dovresti avere problemi nell'impostarlo così. cmq, quella parte è un di più: molto spesso, senza nemmeno specificare il tipo, l'engine è in grado di recuperarlo dai parametri stessi. prova a rimuovere quella parte e vedi se ti funziona tutto

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
267 messaggi dal 29 settembre 2009
Salve ,
Sono interessato a modificare questo provider per la scrittura di dati crittografati poiche vorrei mettere nel profilo di ogni utente i relativi dati anagrafici. Sinceramete chiedo qui perchè non so proprio da dove inziare e quali siano ad esmpio la classi da utilizzare per la crittografia stessa. Diciamo che il codice proposto sono riuscito ad usarlo facilmente e quindi tutta la parte di configurazione lo già masticata ma volevo apportare questa utile modifica.

Avete qualche consiglio ?
267 messaggi dal 29 settembre 2009
Grazie Daniele per il consiglio e diciamo che da questa mattina ho fatto passi da gigante dal punto di vista della crittografia :D ...

allora ho utilizzato l'Algoritmo di Rijndael per crittografare i dati e ho messo il file che contiene la chiave ufficiale dentro la cartella App_Data sperando che questa sia effettivamente non raggiungibile da una qualunque richiesta HTTP

Sono persino riuscito con qualche manciata di codice a modificare il provider in questione per adattarlo alla mie esigenze anche se cè qualcosa che non mi piace ... ti posto quel poco di codice che ho scritto

 public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection)
        {
...cut
//al momento del'assegnazione del valore faccio
// check dei null
                    if (pp.Deserialized && pp.PropertyValue == null)
                        value = DBNull.Value;
                    else
                    {
                        if (datatype == SqlDbType.VarChar)
                        {
                            value = DataCrypter.EncryptString(pp.PropertyValue.ToString());
                        }
                        else
                        {
                            value = pp.PropertyValue;
                        }
                    }
...cut
}

Mentre in lettura ho modificato il seguente metodo
private void GetProfileDataFromTable(SettingsPropertyCollection properties, SettingsPropertyValueCollection svc, string username)
    {
...cut
if (!(val is DBNull || val == null))
            {
                            SqlDbType datatype = GetSqlDbTypeFromCLRType(propValue.PropertyValue);

                            if (datatype == SqlDbType.VarChar)
                            {
                                propValue.PropertyValue = DataCrypter.DecryptString(val.ToString());
                            }
                            else
                            {
                                propValue.PropertyValue = val;
                            }

              propValue.IsDirty = false;
              propValue.Deserialized = true;
            }
..cut
}



Come si vede dal codice di esempio mi accerto di crittografare (decriptare) solo dati di tipo varchar e nel mio caso va piu che bene

Solo che la cosa che mi incuriosiva particolarmente era come decidere in fase di configurazione del profilo quali siano i dati che necessitano di essere crittografati.

ad esempio se adesso il mio profilo è cosi
<properties>
        <add name="Name" type="String" />
        <add name="Surname" type="String" />
        
      </properties>

sarebbe carino vista la possibilità di poter criptare i dati di scrivere qualcosa del genere
<properties>
        <add name="Name" type="String" Encrypt="true" />
        <add name="Surname" type="String" Encrypt="false" />
        
      </properties>


sto forse fantasticando troppo o asp.net permette di fare anche questi piccoli giochi di magia ? :)
Modificato da claudio_dg il 07 luglio 2011 12.17 -
puoi utilizzare l'attributo customProviderData. es:

<add customProviderData="encrypt" />


in questo modo puoi aggiungere info custom, da leggere con la proprietà Attributes

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
267 messaggi dal 29 settembre 2009
ho provato a leggere il dato in debug e funziona alla grande ... grazie!



267 messaggi dal 29 settembre 2009
Scusami se insisto ancora con questo argomento ma mi è venuto un altro dubbio dovuto al dimensionamento dei campi della tabella CostumProfiles .

Allora se nn faccio crittografia su di un campo in fase di input non ho problemi perche conosco la dimesione della stringa in ingresso e conosco la dimensione del campo del db.

Se faccio crittografia invece con l'algoritomo di Rijndael non so a priori quanto sia lunga la stringa di input perche questa mi viene trasformata (generata) all'interno del provider dei Profili.

Qualche idea mi è venuta .. ad esempio potrei utilizzare un CostumValidator che mi fa l'encrypt della stringa di input per vedere quanto è lunga la stringa criptata e procedere quindi con il controllo...

questa soluzione ha però un problema non posso avvisare a priori l'utente sulla lunghezza del campo.

Inoltre ho notato che stinghe di input di uguali lughezza possono gernerare strighe crittografate di dimensioni diverse.

Quindi come si opera in questi casi ? l'unica soluzione è girare tutti i campi della tabella CostumProfiles a Text ?

ciao
Modificato da claudio_dg il 12 luglio 2011 08.40 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.