¿Es posible firmar un documento XML sin tener que utilizar KeyContainerName?
-
12-10-2019 - |
Pregunta
Quiero crear 2 dlls muy simples:
1) que va a firmar un documento XML 2) que se compruebe que el ya no haya documento xml sido modificado.
He intentado utilizar el RSACryptoServiceProvider y un contenedor de claves. Pero cuando me traslado a una máquina diferente esto no funciona como la clave está siendo almacenado en la máquina.
Quiero almacenar la clave en los archivos DLL im creación (Sé que esto no es recomendado) pero simplemente no puede encontrar la manera de escribir algo de código para firmar simplemente un documento XML y compruebe que no se ha cambiado.
Así que necesito para usar clave simétrica para hacer lo que quiero es esto posible?
Pete
Solución
Ya menciona los problemas con el almacenamiento de la clave privada en el archivo DLL, por lo que no voy a repetir eso.
Haga lo siguiente:
En su propia máquina de ejecutar este código:
var key = new RSACryptoServiceProvider(2048);
string publicKey = key.ToXmlString(false);
string privateKey = key.ToXmlString(true);
Console.WriteLine(publicKey);
Console.WriteLine(privateKey);
esta salida a dos líneas (largos). Copiar, aquellos en los que su código:
Señal:
var privateKey = new RSACryptoServiceProvider();
privateKey.FromXmlString(/* insert the private-key XML string here */ );
privateKey.SignData(/*...*/);
Verificar:
var publicKey = new RSACryptoServiceProvider();
publicKey.FromXmlString(/* insert the public-key XML string here */ );
publicKey.VerifyData(/*...*/);
Otros consejos
Si está a punto de comprobar que el documento XML no se ha modificado un simple MD5 checksum (o cualquier otro bien algoritmo de hash) que sea más fácil de implementar y es lo que necesita. Sería también verificable en diferentes máquinas.