Per risolvere questo problema in maniera definitiva ho deciso di creare un servizio on line di ridimensionamento delle immagini "al volo".
Il sistema è molto semplice:
1) registrarsi al servizio contattandomi marco@ghizzi.it e comunicandomi la cartella delle immagini pubblicate on line.
2) vi verrà fornito un codice utente.
3) utilizzare il link del seguente tipo anziché l'immagine locale:
htttp://www.ghizzi.it/outimage/<codice_utente>/<nome_immagine_compresa_di_estensione>.ashx
4) a questo url aggiungere in query string uno o più parametri dei seguenti:
width=<larghezza_in_pixel>, height=<altezza_in_pixel>, align=<near_far_o_center>, color=<colore_di sfondo>
5) al posto di tali settaggi si può precaricare dei preset identificati da dei codici all'atto della registrazione.
Per ulteriori informazioni, contattatemi alla email marco@ghizzi.it
martedì 15 marzo 2011
venerdì 4 marzo 2011
Come memorizzare le password
Recentemente mi sono posto questo problema:
qual'è il metodo migliore per memorizzare una password in un database, evitando ovviamente di metterla in chiaro?
A tale domanda la mia prima risposta è stata quella di utilizzare la funzione di hashing della stringa, presente praticamente in ogni liunguaggio di programmazione "attuale" (ho diretta esperienza in Java e .NET).
Questa scelta però non è vincente in quanto l'hash non garantisce la "portabilità" tra tecnologie diverse (la funzione di hashing di Java e C# sono diverse!) ma nemmeno tra versioni diverse della stessa tecnologia: infatti non si garantisce che tale algoritmo di hashing non venga cambiato in future versioni dello stesso linguaggio.
A mio avvio quindi la scelta migliore è quella di usare uno degli algoritmi di generazione del digest come può essere l'SHA-1 o qualsiasi altro algoritmo superiore.
Riporto sotto il codice per generare tale digest nei due linguaggi che utilizzo di norma.
C#.NET:
///
/// Create Digest of one string
///
///
///
public static byte[] GetDigest(String arg)
{
System.Security.Cryptography.SHA1 sha = new System.Security.Cryptography.SHA1Managed();
ASCIIEncoding ae = new ASCIIEncoding();
byte[] data = ae.GetBytes(arg);
byte[] digest = sha.ComputeHash(data);
return digest;
}
///
/// COnverts an array of bytes in the UNICODE value of the string.
///
///
///
public static string GetAsString(byte[] bytes)
{
StringBuilder s = new StringBuilder();
int length = bytes.Length;
for (int n = 0; n < length; n++)
{
s.Append(Convert.ToChar(bytes[n]));
}
return s.ToString();
}
JAVA:
public byte[] getDigest(String arg) throws java.security.NoSuchAlgorithmException, UnsupportedEncodingException {
java.security.MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
digest.reset();
return digest.digest(arg.getBytes("UTF-8"));
}
public static String GetAsString(byte[] bytes) {
StringBuilder s = new StringBuilder();
int length = bytes.length;
for (int n = 0; n < length; n++) {
s.append((char) (bytes[n] & 0xff));
}
return s.toString();
}
qual'è il metodo migliore per memorizzare una password in un database, evitando ovviamente di metterla in chiaro?
A tale domanda la mia prima risposta è stata quella di utilizzare la funzione di hashing della stringa, presente praticamente in ogni liunguaggio di programmazione "attuale" (ho diretta esperienza in Java e .NET).
Questa scelta però non è vincente in quanto l'hash non garantisce la "portabilità" tra tecnologie diverse (la funzione di hashing di Java e C# sono diverse!) ma nemmeno tra versioni diverse della stessa tecnologia: infatti non si garantisce che tale algoritmo di hashing non venga cambiato in future versioni dello stesso linguaggio.
A mio avvio quindi la scelta migliore è quella di usare uno degli algoritmi di generazione del digest come può essere l'SHA-1 o qualsiasi altro algoritmo superiore.
Riporto sotto il codice per generare tale digest nei due linguaggi che utilizzo di norma.
C#.NET:
///
/// Create Digest of one string
///
///
///
public static byte[] GetDigest(String arg)
{
System.Security.Cryptography.SHA1 sha = new System.Security.Cryptography.SHA1Managed();
ASCIIEncoding ae = new ASCIIEncoding();
byte[] data = ae.GetBytes(arg);
byte[] digest = sha.ComputeHash(data);
return digest;
}
///
/// COnverts an array of bytes in the UNICODE value of the string.
///
///
///
public static string GetAsString(byte[] bytes)
{
StringBuilder s = new StringBuilder();
int length = bytes.Length;
for (int n = 0; n < length; n++)
{
s.Append(Convert.ToChar(bytes[n]));
}
return s.ToString();
}
JAVA:
public byte[] getDigest(String arg) throws java.security.NoSuchAlgorithmException, UnsupportedEncodingException {
java.security.MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
digest.reset();
return digest.digest(arg.getBytes("UTF-8"));
}
public static String GetAsString(byte[] bytes) {
StringBuilder s = new StringBuilder();
int length = bytes.length;
for (int n = 0; n < length; n++) {
s.append((char) (bytes[n] & 0xff));
}
return s.toString();
}
Iscriviti a:
Post (Atom)