Как сохранить объект класса в файл и затем зашифровать его с открытым и закрытым ключом - PullRequest
1 голос
/ 26 февраля 2010

Как сохранить объект класса в файл и затем зашифровать его открытым и закрытым ключом.

закрытый ключ должен быть один для всех (только для безопасности)

, а открытый ключ должен быть другимдля каждого файла.

Я хочу использовать этот код ... Похоже, это то, что я хочу, но Мне все еще нужно шифрование .

    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
        }
    }
}

для модераторов: пожалуйстане удаляйте тег C #, потому что я могу получить ответ на C #, и у него очень мало шансов получить ответ nemerle:)

1 Ответ

1 голос
/ 26 февраля 2010

Для этого нет стандартной библиотеки в .Net (по крайней мере, ни одной из известных мне). Но вы могли бы следовать этим принципам:

У вас есть 2 ключа. Симметричный (AES) или асимметричный (открытый и закрытый ключ). Ключ 1 закрыт, ключ 2 открыт.

Для каждого файла, который вы создаете третий ключ, этот ключ обычно является симметричным (AES) ключом. Этот ключ вы шифруете ключом 1 и ключом 2, а результат этих 2 шифрований вы храните в заголовке файла. Ключом 3 вы шифруете свои данные.

Чтобы прочитать, вы можете выбрать ключ 1 или ключ 2, чтобы расшифровать ключ, который вам нужен (ключ 3), чтобы прочитать содержимое файла.

Пространство имен System.Security.Cryptography содержит все, что вам нужно.

...