Cómo ahorrar objeto de clase de archivo y luego cifrar con la clave abierta y cerrada

StackOverflow https://stackoverflow.com/questions/2340322

  •  22-09-2019
  •  | 
  •  

Pregunta

Cómo ahorrar objeto de clase de archivo y luego cifrar con la clave abierta y cerrada.

llave cerrada debe ser uno para todos (sólo para seguro)

y tecla de apertura debe ser diferente para cada archivo.

Quiero utilizar este código ... El aspecto de que es lo que quiero, pero Todavía necesita cifrado .

    public ObjectToFile(_Object : object, _FileName : string) : bool
{
    try
    {
        // create new memory stream
        mutable _MemoryStream : System.IO.MemoryStream = System.IO.MemoryStream();

        // create new BinaryFormatter
        def _BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
                    = System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

        // Serializes an object, or graph of connected objects, to the given stream.
        _BinaryFormatter.Serialize(_MemoryStream, _Object);

        // convert stream to byte array
        mutable _ByteArray : array[byte] = _MemoryStream.ToArray();

        // Open file for writing
        def _FileStream : System.IO.FileStream = 
        System.IO.FileStream(_FileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);

        // Writes a block of bytes to this stream using data from a byte array.
        _FileStream.Write(_ByteArray, 0, _ByteArray.Length);

        // close file stream
        _FileStream.Close();

        // cleanup
        _MemoryStream.Close();
        _MemoryStream.Dispose();
        _MemoryStream = null;
        _ByteArray = null;

         true
    }
    catch
    {
        | e is Exception => // Error
        {
            Console.WriteLine("Exception caught in process: {0}", e.ToString());
            false
        }
    }
}

para moderadores: por favor no retire la etiqueta C #, porque soy capaz de obtener respuesta de C # y no hay posibilidades de conseguir bajas respuesta Nemerle:)

¿Fue útil?

Solución

No hay biblioteca estándar en .Net para esto (al menos ninguno que yo sepa). Pero se puede seguir estos principios:

Tiene 2 llaves. Ya sea simétrica (AES) o asimétrica (pública y clave privada). Key 1 está cerrada, la llave 2 está abierta.

Para cada fichero se crea una tercera clave, esta clave es típicamente una clave simétrica (AES). Esta llave a cifrar con las teclas 1 y 2, y el resultado de estas 2 cifrados se almacenan en la cabecera del archivo. Con la tecla 3 encriptar sus datos.

Para leer, se puede elegir la tecla 1 o la tecla 2 para descifrar la clave que necesita (tecla 3) para leer el contenido del archivo.

El System.Security.Cryptography espacio de nombres contiene todo lo que necesita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top