2011-06-27 8 views
11

Entiendo que esto podría ser una repetición de esta pregunta: How to encrypt data in sql server and decrypt it in .net apps - Pero esto fue preguntado hace casi un año y espero que haya habido avances o algo así.Encriptar en SQL Server/Descifrar en .Net 4

De todos modos, tenemos una aplicación que transfiere archivos de FTP de una ubicación a otra y, obviamente, el perfil de FTP necesita una contraseña. Tenemos una base de datos con todos los detalles de los perfiles, pero necesitamos cifrar las contraseñas. Pensamos en descifrarlos en SQL y luego enviarlos a la aplicación, pero eso significaría enviarlos a través de la red, lo que no queremos.

Queremos encriptar las contraseñas almacenadas, pasar los detalles a la aplicación y luego descifrarlos dentro de la aplicación.

¿Esto es posible?

De mi Google, parece que no lo es, pero espero que alguien tenga un truco o algo.

¡Gracias de antemano!

Nota: Uso .Net 4 y SQL Server 2008 R2.

+0

+1 para señalar claramente que hay una pregunta similar, pero demasiado antigua. –

Respuesta

6

Encriptación y descifrado utilizando las funciones de la API de cifrado de columna del servidor SQL (como EncryptByKey) no es compatible con ningún cifrado o descifrado del lado del cliente porque utiliza un formato de almacenamiento interno, no documentado.

Me gustaría decir que su miedo a enviar contraseñas a través de la red no está fundamentado, ya que SQL Server proporciona confidencialidad de conexión de red, consulte Encrypting Connections to SQL Server.

Sus mejores opciones serían ya sea a almacenar la contraseña en una columna de cifrado y utilizar el incorporado en las funciones de cifrado de SQL Server (EncryptByKey, DecryptbyKey) o utilizar Transparent Database Encryption. los criterios también eligen uno o el otro es principalmente el requisito de licencia (TDE requiere Enterprise Edition) ya que TDE es superior al cifrado de nivel de columna en todos los aspectos. Independientemente de la solución que elija, rápidamente se dará cuenta de que el problema principal es la administración de claves, y que SQL Server ofrece una historia viable, consulte Encryption Hierarchy.Independientemente de cómo diseñe la solución, nunca es necesario que la aplicación encripte o descifre la contraseña en sí, si la necesita, entonces está claramente en un camino equivocado (ya que la aplicación no puede administrar las claves), por lo que la cuestión de CLR crypto y SQL crypto compatibilidad nunca debe surgir.

1

Simpy cifra y descifra las contraseñas en .NET, en lo que respecta a SQL, solo almacena texto.

+0

Las contraseñas se almacenan originalmente en la base de datos, no provienen de la aplicación, ¡así que esto no se aplicaría! –

-1

Me parece que "la respuesta obvia" es que necesita usar el mismo algoritmo (o el par de cifrado/descifrado correspondiente) tanto en el servidor SQL como en dotNet. Como el primero usa T-SQL y el segundo un lenguaje de código administrado como C#/VB, debe escribir/fuente las dos mitades del algoritmo en diferentes idiomas. Yuk.

¿Has pensado en usar SQL CLR? De esta forma, podría escribir ambas mitades en, por ejemplo, C# y ejecutar ese código desde SQL.

He tenido una copia de this sentado en mi estante por un tiempo, pero nunca profundicé demasiado en ella, principalmente porque, aunque es genial en principio, nunca he encontrado una 'necesidad' de usar SQLCLR. Su problema, sin embargo suena como un fuerte candidato :-)

HTH :-)

Damien

+0

-1 "el mundo está lleno de malos sistemas de seguridad diseñados por personas que leen la Criptografía Aplicada". Esto es simplemente un mal consejo, omite por completo el problema de la administración de claves e ignora el hecho de que las funciones T-SQL crypt utilizan formatos de almacenamiento no documentados que hacen que el IV y el texto cifrado no estén disponibles. –