Elektrisches Tagebuch

    Vor ungefähr zwei Jahren habe ich eine Webanwendung erstellt, um ein persönliches Tagebuch für Silverlight zum persönlichen Gebrauch zu führen. Für diejenigen, die es brauchen - ich möchte meine Entscheidung teilen.

    Ich weiß aus eigener Erfahrung, dass die Hauptfunktion eines Tagebuchs darin besteht, schnell einen kleinen neuen Datensatz hinzuzufügen (das erneute Lesen eines Tagebuchs erfolgt alle paar Jahre). Und natürlich ist es äußerst wichtig, die Vertraulichkeit zu gewährleisten.

    Die Anwendung hat nur einen Client-Teil, die Daten selbst werden nicht im Internet gespeichert. Tatsächlich ist die Anwendung ein spezialisierter lokaler Datei-Editor, mit dem Datensätze automatisch verschlüsselt und mit Metadaten versehen werden können.

    Sie können es hier in Aktion ausprobieren: www.kalantyr.ru/Diary ohne Registrierung.

    Ich habe beschlossen, keine Datensynchronisation zwischen Computern (Fahrrad) zu erfinden und die Datei einfach über DropBox zu synchronisieren. Oder Sie können es auf einem Flash-Laufwerk mit sich führen - für wen es bequemer ist.

    Vorwegnahme von Zweifeln: Vielleicht wird jemand sagen, dass die Anwendung jetzt nirgendwo hin sendet, und nach ein paar Monaten wird sie leise beginnen ... Wenn jemand sie benötigt, kann ich die Quellen senden, das macht mir nichts aus. Oder einfach ein fertig kompiliertes xap-Modul - setzen Sie es auf Ihr Hosting und nutzen Sie es für die Gesundheit.



    Hier sind Screenshots für diejenigen, die Silverlight nicht installieren möchten:
    dl.dropbox.com/u/5681766/Habr/Diary/01.PNG
    dl.dropbox.com/u/5681766/Habr/Diary/02.PNG
    dl.dropbox.com/ u / 5681766 / Habr / Diary / 03.PNG
    dl.dropbox.com/u/5681766/Habr/Diary/04.PNG
    dl.dropbox.com/u/5681766/Habr/Diary/05.PNG
    dl.dropbox.com/u/5681766/Habr/Diary/06.PNG

    Eine der Funktionen, die mir wichtig waren, waren die Tags. Außerdem ist der Tag bei mir nicht nur ein Wort, sondern ein Titel + eine Beschreibung. Ein Tag kann beispielsweise eine Person beschreiben und in der Beschreibung ihre Kontaktinformationen hinzufügen.

    Im Laufe der Zeit ändern sich die Technologien, so dass es einfach ist, von Silverlight auf etwas Relevanteres umzusteigen - Funktionen zum Exportieren / Importieren von Daten über reguläre XML-Dateien sind implementiert.

    Wenn Sie in Tausenden von Datensätzen etwas finden müssen, werden die Datensätze nach Tags / Teilzeichenfolge / Datum gefiltert.

    Es gibt noch eine weitere, nicht offensichtliche Funktion: Wenn jemand im Hintergrund steht, können Sie durch Drücken der Plus- oder Minus-Tasten auf dem Ziffernblock den Kontrast des Texts ändern und ihn über die Schulter hinweg unleserlich machen :)

    Informationen zum Datenschutz: Daten aus dem Browser werden nirgendwo übertragen. Wenn sie in einer Datei gespeichert werden, werden sie von AES verschlüsselt:

    		private static byte[] Encrypt(IList key, byte[] data)
    		{
    			using (var encryptor = new AesManaged())
    			{
    				encryptor.GenerateIV();
    				encryptor.IV = GetKey(key, encryptor.IV.Length);
    				encryptor.GenerateKey();
    				encryptor.Key = GetKey(key, encryptor.Key.Length);
    				using (var encryptionStream = new MemoryStream())
    				using (var encrypt = new CryptoStream(encryptionStream, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
    				{
    					encrypt.Write(data, 0, data.Length);
    					encrypt.FlushFinalBlock();
    					encrypt.Close();
    					return encryptionStream.ToArray();
    				}
    			}
    		}
    		private static byte[] Decrypt(IList key, byte[] data)
    		{
    			try
    			{
    				using (var decryptor = new AesManaged())
    				{
    					decryptor.GenerateIV();
    					decryptor.IV = GetKey(key, decryptor.IV.Length);
    					decryptor.GenerateKey();
    					decryptor.Key = GetKey(key, decryptor.Key.Length);
    					using (var decryptionStream = new MemoryStream())
    					using (var decrypt = new CryptoStream(decryptionStream, decryptor.CreateDecryptor(), CryptoStreamMode.Write))
    					{
    						decrypt.Write(data, 0, data.Length);
    						decrypt.Flush();
    						decrypt.Close();
    						return decryptionStream.ToArray();
    					}
    				}
    			}
    			catch (CryptographicException)
    			{
    				throw new InvalidOperationException("Неправильный пароль.");
    			}
    		}
    		private static byte[] GetKey(IList value, int keyLength)
    		{
    			var data = new byte[value.Count * keyLength];
    			for (var i = 0; i < data.Length; i++)
    				data[i] = value[i % value.Count];
    			var key = new byte[keyLength];
    			for (var i = 0; i < key.Length; i++)
    				key[i] = data[i];
    			return key;
    		}
    


    Update:
    Hier ist die kompilierte Anwendung, die auf dem lokalen Computer (ohne Internet) ausgeführt werden kann: dl.dropbox.com/u/5681766/Habr/Diary/Diary.zip

    Update 2:
    Hier sind die Quellen: dl.dropbox.com/u/5681766/Habr /Diary/Diary_SourceCode.zip

    Jetzt auch beliebt: