2009-04-06 4 views
6

¿Cómo firmo un archivo usando .NET y cómo valido que la clave generada sea válida una vez que la leí?Firme un archivo usando una clave privada en .NET

Mi objetivo es tener un archivo de texto con algunos valores y una clave generada. Luego quiero poder verificar esa clave generada en el archivo para que nadie haya manipulado los valores en el archivo una vez que envié el archivo a un cliente.

Actualización: Encubierto here con alguna ayuda de las respuestas.

Respuesta

-2

Tiene dos posibilidades:

  • vez es en las propiedades del proyecto en la opción sesión.
  • El segundo es modificar el archivo AssemblyInfo.cs y añadir los comandos para utilizar el sn creación: [assembly: AssemblyKeyFile("..\\..\\SN_Generated.snk")]
+2

No quiero firmar un ensamblaje. Quiero generar un valor en un archivo para evitar alterar los valores en ese archivo. – Riri

3

Si desea firmar un montaje, jaloplo dio la solución.

Si desea firmar algunos archivos creados por su programa, eche un vistazo al en el espacio de nombres System.Security.Cryptography.

6

Prueba esto:

class Program 
{ 
    static byte[] Sign(string message, RSAParameters key) 
    { 
     RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
     rsa.ImportParameters(key); 

     byte[] toSign = Encoding.Unicode.GetBytes(message); 
     return rsa.SignData(toSign, "SHA1"); 
    } 

    static bool Verify(string message, byte[] signature, RSAParameters key) 
    { 
     RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
     rsa.ImportParameters(key); 

     byte[] toVerify = Encoding.Unicode.GetBytes(message); 
     return rsa.VerifyData(toVerify, "SHA1", signature); 
    } 

    static void Main(string[] args) 
    { 
     string message = "Let's sign this message."; 

     RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); // Creates a new RANDOM key. 
     RSAParameters privatekey = rsa.ExportParameters(true); 
     RSAParameters publickey = rsa.ExportParameters(false); 

     byte[] signature = Sign(message, privatekey); 

     if (Verify(message, signature, publickey)) 
     { 
      Console.WriteLine("It worked!"); 
     } 
    } 
} 

Es importante tener en cuenta que un nuevo par de claves pública/privada se genera cada vez que se inicia este programa. Para hacer lo que desea, querrá guardar el par de llaves público/privado antes de usarlo en ambos extremos. Su clave pública es lo único que necesita verificar, por lo que su clave privada no se publicará en el cliente.

Es posible que desee consultar ExportParameters o ExportCspBlob para lograr guardar/cargar el par de llaves público/privado.

Cuestiones relacionadas