2010-02-26 14 views
1

Comment enregistrer un objet de classe dans un fichier et le chiffrer avec une clé ouverte et une clé fermée.Comment enregistrer un objet de classe dans un fichier, puis le chiffrer avec une clé ouverte et une clé fermée

clé fermée doit être un pour tous (juste pour la sécurité)

et la clé ouverte doit être différent pour chaque fichier.

Je veux utiliser ce code ... En regardant comme c'est ce que je veux mais J'ai encore besoin de cryptage.

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

aux modérateurs: s'il vous plaît ne pas enlever étiquette C#, parce que je suis en mesure d'obtenir C# réponse et il y a peu de chances d'obtenir une réponse nemerle :)

+0

@nCdy: Demandez-vous comment faire cela en C# ou nemerle, ou vous satisfaire? – casperOne

+0

soit me satisfaire :) il est facile de convertir (et d'optimiser) tout code C# à Nemerle – Cynede

Répondre

1

Il n'y a pas de bibliothèque standard .Net pour cela (au moins aucun que je sache). Mais vous pouvez suivre ces principes:

Vous avez 2 clés. Wether symétrique (AES) ou asymétrique (clé privée publique &). La clé 1 est fermée, la clé 2 est ouverte.

Pour chaque fichier que vous créez une 3e clé, cette clé est généralement une clé symétrique (AES). Cette clé est cryptée avec la clé 1 et la clé 2, et le résultat de ces deux cryptages est stocké dans l'en-tête du fichier. Avec la clé 3, vous cryptez vos données.

Pour lire, vous pouvez choisir la touche 1 ou la touche 2 pour déchiffrer la clé dont vous avez besoin (touche 3) pour lire le contenu du fichier.

L'espace de noms System.Security.Cryptography contient tout ce dont vous avez besoin.

+0

Je peux comprendre le truc avec une clé ... Mais j'ai besoin d'une méthode de travail (du code) quelques exemples de cryptage. Je pense aussi que .net a des bibliothèques, donc je me demande si ce n'est pas le cas. – Cynede

+0

De nombreux exemples de code sont sur MSDN (exemple: http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptostream.aspx). .Net contient des classes pour le cryptage, mais pas pour ce domaine de problème spécifique. – GvS