verschlüsselung



  • hey, hab problem mit der verschlüsselung von daten.

    Habn Programm wo ich von einer Liste daten aufm pc speichere.
    diese daten sollen jetzt verschlüsselgespeichert werden.

    Hab es versucht mit BinaryWriter auf *.bin datei zu speichern aber das alleine reicht nicht und ziet die wörter nur mit leerzeichen außeinander.

    Hab ne methode gefunden im internet um di daten i zeichen umzuwandeln,bzw ist di liste dann in einer ganzen reihe.

    Code:

    using System.Collections.Generic;
    using Microsoft.Win32;
    using System.Text;
    using System;
    using System.IO;
    using System.Security.Cryptography;
    
    namespace Dreiecksbeispiel_v1
    {
        class BinaryReadWrite
        {
            private readonly byte[] key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 };
            private readonly byte[] iv = new byte[] { 65, 110, 68, 26, 69, 178, 200, 219 };
    
            public void write(List<User> userList)
            {
    
                MemoryStream ms = new MemoryStream();
    
                CryptoStream cryptoStream = new CryptoStream(ms,
                                                             new TripleDESCryptoServiceProvider().CreateEncryptor(key, iv),
                                                             CryptoStreamMode.Write);
                for (int i = 0; i < userList.Count; i++)
                {
                    byte[] toEncrypt = ASCIIEncoding.ASCII.GetBytes(userList[i].GetUserName() + "|" + userList[i].GetPassword() + "|"
                                 + userList[i].GetIsAdmin() + "\n");
                    cryptoStream.Write(toEncrypt, 0, toEncrypt.Length);
                }
                cryptoStream.FlushFinalBlock();
    
                byte[] ret = ms.ToArray();
    
                FileStream fs = File.Create("User.bin");
                UTF8Encoding utf8 = new UTF8Encoding();
                BinaryWriter bw = new BinaryWriter(fs,utf8);
    
                bw.Write(ret);
    
                bw.Close();
                cryptoStream.Close();
                ms.Close();
            }
    
            public void read()
            {
                FileStream readStream = new FileStream("User.bin", FileMode.Open);
                BinaryReader br = new BinaryReader(readStream);
                byte[] data = null;
    
                for (int i = 0; i < br.BaseStream.Length; i++)
                {
                    data = br.ReadBytes(i);
                }
    
                readStream.Close();
                br.Close();
    
                MemoryStream memoryStream = new MemoryStream(data);
    
                CryptoStream cryptoStream = new CryptoStream(memoryStream,new TripleDESCryptoServiceProvider().CreateDecryptor(this.key,this.iv),CryptoStreamMode.Read);
                byte[] fromEncrypt = new byte[data.Length];
                cryptoStream.Read(fromEncrypt, 0, fromEncrypt.Length);
    
                Console.WriteLine(ASCIIEncoding.ASCII.GetString(fromEncrypt));
            }
    
        }
    }
    

    Das write funktioniert eig gut.
    Nur beim read geht gar nichts.

    wie kann ich das read so baun das ich wieder alles normal habe und dann noch wieder jeweils in liste speichere?

    Edit by Moderator Dravere: [cs]-Tags reingetan



  • 😃

    slei1337 schrieb:

    Das write funktioniert eig gut.
    Nur beim read geht gar nichts.

    Debuggen! Laß dir beim Schreiben mal die einzelnen Zwischenschritte (Byte-Array) ausgeben und vergleiche diese dann beim Einlesen...

    P.S. Anstatt ASCIIEncoding.ASCII würde ich besser gleich ASCIIEncoding.Default oder ASCIIEncoding.ASCII.Utf8 benutzen (da sonst Umlaute etc. als Fragezeichen '?' ausgegeben werden).


Anmelden zum Antworten