Pregunta

Yo no soy crypto experto, pero como yo lo entiendo, 3DES es un algoritmo de cifrado simétrico, lo que significa que no utiliza claves pública/privada.

Sin embargo, he sido encargado de cifrar los datos con una clave pública, (específicamente, una .CER archivo).Si usted ignora todo el simétrica/asimétrica thang, yo debería ser capaz de utilizar los datos clave de la clave pública como la TripleDES clave.Sin embargo, estoy teniendo dificultad para extraer la clave bytes desde el .CER archivo.Este es el código tal y como está..

TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
X509Certificate2 cert = new X509Certificate2(@"c:\temp\whatever.cer");
cryptoProvider.Key = cert.PublicKey.Key.

El método más simple que puedo encontrar para extraer el crudo clave de bytes desde el certificado es ToXmlString(bool) y, a continuación, haciendo algunos hacky substringing sobre la cadena devuelta.Sin embargo, esto parece tan hackish siento que me debe de faltar una manera más sencilla, manera más obvia de hacerlo.

Me estoy perdiendo una manera más simple de usar una .cer archivo para proporcionar los datos clave para el C# 3DES crypto clase, o es que la piratería fuera del certificado de cadena xml realmente la mejor manera de ir sobre esto?

¿Fue útil?

Solución

cryptoProvider.Clave = cert.GetPublicKey()?

Otros consejos

No es una buena idea utilizar claves generadas para la criptografía asimétrica para la criptografía simétrica.No hay nada que le impide venir para arriba con una manera de utilizar una clave pública como una clave de cifrado 3DES, pero el resultado final será que cualquiera que tenga acceso a la clave pública (y esto significa todo el mundo!) será capaz de descifrar el texto cifrado.

El cifrado de grandes cantidades de datos con criptografía asimétrica no es el camino a seguir.En su lugar, cifrar los datos con un algoritmo simétrico y cifrar la clave simétrica (y IV) con su clave pública.

Esta página de MSDN realmente me ayudó a ponerse en marcha con .Neto de la criptografía simétrica.

El verdadero problema aquí es que la clave pública es, así, público.Significado libremente disponibles, es decir, se trata de suministrar cero seguridad de cifrado.

Diablos, nadie en este hilo tiene toda la información que necesita para descifrar todo.Para hacer los empleados.

Por favor, intenta animar a sus usuarios que no utiliza la clave pública de datos como el de que.Al menos, llegar a dar una contraseña o algún otro un poco más seguro fragmento puede utilizar para generar una constante de la clave.

Una cosa más.Certificado de teclas varían en tamaño.Probablemente lo pueda manejar tirar bytes adicionales en la clave, pero es probable que obtener un Índice de Matriz / Fuera De los Límites de la excepción si la clave pasa a ser más corta que la clave 3DES necesidades.Dudo que va a suceder, 3DES sólo necesita 56bits, cert y las teclas son casi siempre 256bits o más.

Creo que lo que te falta es convertir los bytes de la cadena que contiene la clave de bytes.

Espero que el método FromBase64String le ayudará a:

byte[] keyBytes = Convert.FromBase64String(sourceString);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top