Mi organización ha decidido encriptar ciertos datos en nuestra base de datos, y se me ha encomendado la tarea de implementar el cifrado. Necesito poder encriptar los datos, almacenar la versión encriptada en un campo VARCHAR en nuestra base de datos, y luego recuperarla y descifrarla de nuevo a su estado habitual.¿Cómo puedo implementar una encriptación fuerte y reversible que interopera entre ASP.NET 2.0, Coldfusion 5 y Classic ASP?
En la superficie parece una tarea simple. Hay una serie de formas de implementar el cifrado. Uno que he usado anteriormente se basa en el código de cifrado AES que se encuentra en this StackOverflow question.
Lo que lo hace más difícil en este caso, es necesario escribir código para cifrar/descifrar los datos en varias aplicaciones que acceden a nuestra base de datos, algunas de las cuales se desarrollan utilizando diferentes tecnologías. Tenemos aplicaciones escritas en Coldfusion 5, en Classic ASP y en ASP.NET 2.0. Necesito ser capaz de cifrar datos y almacenarlos en la base de datos con el código de Coldfusion, y luego leerlos y descifrarlos de nuevo a su forma original en ASP.NET. O encriptarlo en ASP clásico y descifrarlo en Coldfusion. O cualquier otra combinación de estas plataformas.
Esto ha resultado ser más difícil de lo que esperaba. Diferentes clases/objetos/funciones/bibliotecas que afirman usar los mismos algoritmos parecen generar resultados diferentes incluso cuando se les dan los mismos datos y el mismo secreto compartido. En el pasado, utilizamos CAPICOM para proporcionar interoperabilidad de cifrado entre Coldfusion y Classic ASP. Pero me he encontrado con problemas al intentar hacer que funcione en ASP.NET. He leído this article about how to get CAPICOM to work in .NET, pero las sugerencias no me han funcionado. Ni siquiera puedo generar una clase de interoperabilidad o importar una referencia al objeto COM sin obtener un error. Además, algunos de nuestros servidores de producción tienen sistemas operativos que no parecen ser compatibles con CAPICOM, por lo que puede ser un callejón sin salida de todos modos.
¿Alguien tiene alguna sugerencia sobre cómo puedo implementar el cifrado de tal manera que cualquiera de las 3 plataformas pueda descifrar lo que los otros han cifrado, mientras se sigue usando un algoritmo razonablemente fuerte?
Editar 2011-12-29:
Como se señaló en los comentarios a continuación, Actualmente estoy esperando encontrar una solución ASP.NET que es compatible con algunos de código ASP clásico nuestra Coldfusion existente/que utiliza CAPICOM. La razón de esto es que nuestro jefe de equipo no quiere que introduzca un nuevo método de encriptación en nuestro código para nuestro propósito actual, a menos que también revise nuestras aplicaciones más antiguas usando encriptación para un propósito diferente de usar el mismo método. Él quiere usar el mismo método de encriptación para ambos propósitos. Desde que revisar nuestras aplicaciones antiguas para usar un nuevo método de encriptación significa no solo cambiar el código, sino también rastrear todos los datos encriptados por las aplicaciones anteriores, descifrarlo y volver a encriptarlo usando el nuevo método, dudo en ir. esa ruta a menos que sea necesario. Con suerte, encontraré la manera de que ASP.NET lea los datos encriptados existentes.
Los datos cifrados de nuestras otras aplicaciones Coldfusion y ASP Classic se codificaron utilizando el objeto COM de CAPICOM. Por lo que puedo decir, la configuración ha sido universalmente el cifrado AES, el tamaño máximo de la clave (que creo que es de 256 bits en AES).
En @ petición de Leigh, aquí es un ejemplo simplificado de cómo nuestras aplicaciones CF existentes utilizan CAPICOM:
<cfscript>
encryptObject = CreateObject("com","CAPICOM.EncryptedData");
encryptObject.Algorithm.Name = 4; // 4 is AES
encryptObject.Algorithm.KeyLength = 0; // 0 is MAX, I believe 256-bit in the case of AES
encryptObject.SetSecret(sharedSecret);
encryptObject.Content = stringToEncrypt;
encryptedData = localScope.encryptObject.Encrypt();
</cfscript>
Por favor, prestar más atención a sus opciones de etiquetas. La etiqueta 'asp' resultó ambigua, y fue limpiada a favor de 'asp-classic'. Habría tenido la única pregunta sobre Stack Overflow etiquetada 'asp', y eso debería haber enviado una gran bandera roja. –
@Joel Mis disculpas. No me di cuenta, pero miraré más cuidadosamente en el futuro. –
¿Qué producto de base de datos está utilizando? –