Sunday, 28 November 2010

BlueScreenView lector de archivos .dmp

Me he encontrado con esta utilidad llamada BlueScreenView, que la considero primordial para leer los archivos .dmp que se crean cuando hay una pantalla azul ya sea de Windows XP / Wondows Vista / Windows 7 (32 o 64bits)





Descargar BlueScreenView (pagina oficial) y ademas es portable


Publicado en tttony.blogspot.com

Monday, 23 August 2010

Convertir codigo de C# a VB.NET y de VB.NET a C#

Existe un utilidad en la web del conocido elGuille que te ayuda a convertir tu codigo de C# a VB.NET y viceversa

Aqui lo puedes encontrar, te bajas el ejecutable y luego te bajas las dos librerias(no se porque no coloco todo junto)

La utilidad no es 100% fiable, todavia le falta por pulir muchas cosas, yo lo uso para convertir los codigos de C# a VB.NET y tiene muchos errores, mas que todo cuando hay comentarios /* ESTE ES UN COMENTARIO EN C# */ que no los parsea bien

Tambien puedes usarlo via web: C# a VB.NET y de VB.NET a C#

Otra buena utilidad online para convertir codigo esta aqui

ACTUALIZACION: 09/08/2011

Me he encontrado una aplicacion online mucho mejor, ya que permite subir un archivo o varios archivos .zip al servidor el cual contenga los archivos .vb para VB.NET o .cs para C# que quieras convertir

http://converter.telerik.com/Default.aspx


Publicado en tttony.blogspot.com

Sunday, 22 August 2010

Encriptar contraseñas con MD5 en C# y VB.NET (Obsoleto)

ADVERTENCIA!!! la encriptacion con la funcion md5() es insegura, es mejor usar la encriptacion BCrypt
Para encriptar contraseñas en tu base de datos lo mas comun es usar la ecriptacion MD5

Codigo C#:

public string GetMD5Hash(string input)
{
MD5CryptoServiceProvider x = new MD5CryptoServiceProvider();
byte[] bs = Encoding.UTF8.GetBytes(input);
bs = x.ComputeHash(bs);
StringBuilder s = new StringBuilder();
foreach (byte b in bs)
{
s.Append(b.ToString("x2").ToLower());
}
string password = s.ToString();
return password;
}


Codigo VB.NET:

Public Function GetMD5Hash(input As String) As String

Dim x As New MD5CryptoServiceProvider()
Byte() bs = Encoding.UTF8.GetBytes(input)
bs = x.ComputeHash(bs)
Dim s As New StringBuilder()
For Each b As Byte in bs

s.Append(b.ToString("x2").ToLower())

Next
Dim password As String = s.ToString()
Return password

End Function


Publicado en tttony.blogspot.com

Sistema de login en C# con Access 2007

He mejorado un poco el sistema y ademas lo puedes descargar como archivo de proyecto para VS2010

Sistema de login

Es facil de usar solo tienes que configurarlo dependiendo de como tengas la base de datos de los usuarios

NUEVO: agregada opcion de encriptacion de contraseña con Bcrypt

La contraseña de la base de datos login.accdb es: test

Ejecuta el proyecto pero modo Debug ya que la base de datos login.accdb esta en el directorio Debug e introduce estos datos:


Usuario: prueba
Contraseña: 5555

El codigo esta documentado


ACTUALIZADO 11/11/12


Publicado en tttony.blogspot.com

Manejar errores en C#

Los errores en las aplicaciones son un dolor de cabeza, no sirve de mucho usar:



try
{
// codigo aqui
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}


Es mejor hacer un log, osea escribir en un archivo el error lanzado, en internet me encontre con este

Cada vez que haya una excepcion tienes la opcion de guardar el error en archivo propio .log o al archivo log del sistema



try
{
// codigo aqui
}
catch(Exception ex)
{
if (!ErrorLog.ErrorRoutine(false, ex))
MessageBox.Show("No es posible escribir en el archivo de error");
}


Fuente: http://www.codeproject.com/KB/dotnet/logger.aspx


Publicado en tttony.blogspot.com

Encriptar/Decriptar cadenas con Base64 en C#

Me he encontrado un codigo para encriptar y decriptar cadenas con Base64:


static class EncryptClass
{

// http://www.codeproject.com/KB/cs/Cryptography.aspx

///
/// Encrypt a string using dual encryption method. Return a encrypted cipher Text
///

/// string to be encrypted
/// use hashing? send to for extra secirity
///
public static string Encrypt(string toEncrypt, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);

string key = Properties.Settings.Default.SecurityKey; //<-- crealo en tu configuracion

if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
hashmd5.Clear();
}
else
keyArray = UTF8Encoding.UTF8.GetBytes(key);

TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;

ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
tdes.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
///
/// DeCrypt a string using dual encryption method. Return a DeCrypted clear string
///

/// encrypted string
/// Did you use hashing to encrypt this data? pass true is yes
///
public static string Decrypt(string cipherString, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = {0};

try
{
/*
* La longitud de cadena enritptada con Hashing es de 24
* si es menor de 24 lanza una excepcion, asi que hay que pasar de ella
*/
toEncryptArray = Convert.FromBase64String(cipherString);
}
catch (Exception)
{
return null;
}

string key = Properties.Settings.Default.SecurityKey;

if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
hashmd5.Clear();
}
else
keyArray = UTF8Encoding.UTF8.GetBytes(key);

TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;

ICryptoTransform cTransform = tdes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

tdes.Clear();
return UTF8Encoding.UTF8.GetString(resultArray);
}
}



Creas un valor de configuracion llamado SecurityKey en tu proyecto y le asignas un valor aleatorio

Fuente: http://www.codeproject.com/KB/cs/Cryptography.aspx

Publicado en tttony.blogspot.com

Saturday, 21 August 2010

Guardar tamaño de las columnas de un DataGridView en C#

La terea es sencilla, guardar el tamaño de las columnas de un DataGridView

Primero creas en tu configuracion un valor llamado por ej. DataGridViewColumnSize con el tipo System.Collections.Specialized.StringCollection

En el evento FormLoad despues de haber cargado tus datos en el DataGridView coloca este codigo:

/* * Creado por tttony 2010 * http://tttony.blogspot.com/ * * POR FAVOR NO BORRES ESTE COMENTARIO */

// Primera vez
if (Properties.Settings.Default.DataGridViewColumnSize == null)
{
// como es primera vez que inicia entonces colocar todas
// las columnas con el mismo tamaño
colWidth = (dgvLastServices.Width / dgvLastServices.Columns.Count) - (dgvLastServices.Columns.Count);
foreach (DataGridViewColumn col in dgvLastServices.Columns)
{
col.Width = colWidth;
}
}
else
{
StringCollection cols = Properties.Settings.Default.DataGridViewColumnSize;

string[] colsArray = new string[cols.Count];
cols.CopyTo(colsArray, 0);
Array.Sort(colsArray);

for (int i = 0; i < colsArray.Length; ++i)
{
string[] a = colsArray[i].Split(',');
int index = int.Parse(a[3]);
dataGridView1.Columns[index].DisplayIndex = Int16.Parse(a[0]);
dataGridView1.Columns[index].Width = Int16.Parse(a[1]);
dataGridView1.Columns[index].Visible = bool.Parse(a[2]);
}
}


Y en el evento FormClosing del formulario coloca esto:

/* * Creado por tttony 2010 * http://tttony.blogspot.com/ * * POR FAVOR NO BORRES ESTE COMENTARIO */
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
StringCollection stringCollection = new StringCollection();

int i = 0;
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
stringCollection.Add(string.Format(
"{0},{1},{2},{3}",
column.DisplayIndex.ToString("D2"), // Column order fix
column.Width,
column.Visible,
i++));
}

Properties.Settings.Default.DataGridViewColumnSize = stringCollection;
Properties.Settings.Default.Save();
}



Cuando se cierra el formulario se guarda el tamaño y propiedades de las columnas

Fuente: http://www.codeproject.com

Publicado en tttony.blogspot.com