2010-12-14 25 views
6

Mi requisito es que necesito métodos simples de cifrado/descifrado en C# para encriptar y descifrar una imagen (tal vez gif/jpeg). Simple causa Tengo que almacenarla en la base de datos en un campo BLOB y algunos otros desarrolladores en algún otro lenguaje de programación (como java) pueden necesitar extraer y mostrar esta imagen. No necesito mucha seguridad porque es solo una cuestión de "seguridad al oscurecer" (vida).Método simple de cifrado/descifrado para cifrar un archivo de imagen

Gulp..can alguien ayuda ...

+0

¿Le pasará a ser el uso de MS SQL 2005 o mayor? Puede encriptar una sola columna si desea ir por esa ruta ... http://msdn.microsoft.com/en-us/library/ms179331(v=SQL.90).aspx –

+0

no ...... ............... – abmv

Respuesta

7

Ya que "no necesitas mucha seguridad" probablemente puedas arreglártelas con algo como AES (Rijndael). Utiliza una clave simétrica y hay mucha ayuda en .NET framework para hacer es fácil de implementar. Hay mucha información en MSDN on the Rijndael class que puede ser útil.

Aquí es un ejemplo muy simplificada de cifrar/descifrar los métodos que se pueden utilizar para trabajar con matrices de bytes (contenidos binarios) ...

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

public class RijndaelHelper 
{ 
    // Example usage: EncryptBytes(someFileBytes, "SensitivePhrase", "SodiumChloride"); 
    public static byte[] EncryptBytes(byte[] inputBytes, string passPhrase, string saltValue) 
    { 
     RijndaelManaged RijndaelCipher = new RijndaelManaged(); 

     RijndaelCipher.Mode = CipherMode.CBC; 
     byte[] salt = Encoding.ASCII.GetBytes(saltValue); 
     PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, salt, "SHA1", 2); 

     ICryptoTransform Encryptor = RijndaelCipher.CreateEncryptor(password.GetBytes(32), password.GetBytes(16)); 

     MemoryStream memoryStream = new MemoryStream(); 
     CryptoStream cryptoStream = new CryptoStream(memoryStream, Encryptor, CryptoStreamMode.Write); 
     cryptoStream.Write(inputBytes, 0, inputBytes.Length); 
     cryptoStream.FlushFinalBlock(); 
     byte[] CipherBytes = memoryStream.ToArray(); 

     memoryStream.Close(); 
     cryptoStream.Close(); 

     return CipherBytes; 
    } 

    // Example usage: DecryptBytes(encryptedBytes, "SensitivePhrase", "SodiumChloride"); 
    public static byte[] DecryptBytes(byte[] encryptedBytes, string passPhrase, string saltValue) 
    { 
     RijndaelManaged RijndaelCipher = new RijndaelManaged(); 

     RijndaelCipher.Mode = CipherMode.CBC; 
     byte[] salt = Encoding.ASCII.GetBytes(saltValue); 
     PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, salt, "SHA1", 2); 

     ICryptoTransform Decryptor = RijndaelCipher.CreateDecryptor(password.GetBytes(32), password.GetBytes(16)); 

     MemoryStream memoryStream = new MemoryStream(encryptedBytes); 
     CryptoStream cryptoStream = new CryptoStream(memoryStream, Decryptor, CryptoStreamMode.Read); 
     byte[] plainBytes = new byte[encryptedBytes.Length]; 

     int DecryptedCount = cryptoStream.Read(plainBytes, 0, plainBytes.Length); 

     memoryStream.Close(); 
     cryptoStream.Close(); 

     return plainBytes; 
    } 
} 
+0

¿Este cifrado no cambia el formato del archivo de imagen? – Mani

+0

@Mani No, no lo hace. El cifrado codifica el contenido de un archivo (independientemente de su tipo). El descifrado (utilizando el método complementario apropiado utilizado para encriptar, y las claves asociadas) simplemente revierte los datos encriptados para restaurar el contenido original del archivo, el tipo de archivo NO cambia. –

1

Mira el System.Security.Cryptography espacio de nombres.

Aquí hay un artículo sobre encrypting data.

Su pregunta es muy general: el artículo vinculado le brinda ejemplos de encriptación utilizando las funciones integradas.

+5

¡Puedo verlo todo el día! – abmv

+0

@abmv - http://msdn.microsoft.com/en-us/library/as0w18af.aspx – Oded

Cuestiones relacionadas