Meddelande

Minska
No announcement yet.

C# - Problem att spara och återläsa krypterad sträng

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • C# - Problem att spara och återläsa krypterad sträng

    Sitter och försöker spara ner en krypterad sträng i en fil, för att sedan läsa tillbaka den i programmet, men stöter på patrull.

    Hittade en klass på nätet som jag försöker använda för krypteringen:
    http://hectorcorrea.com/blog/Encrypt...ing-in-C-Sharp

    Får inga felmeddelanden vid skrivning till fil, men när jag försöker hämta innehållet och dekryptera det får jag följande:
    Felmeddelande skrev:
    CryptographicException
    Utfyllnaden är ogiltig och går inte att ta bort.
    Jag tror att det är något fel i sättet jag sparar filen, för om jag öppnar filen i en textredigerare och kopierar innehållet och lägger in i en strängvariabel i C# och försöker dekryptera det så får jag samma fel. Om jag däremot dekrypterar det värdet jag skriver till filen så funkar det.

    Markerar i koden nedan vilken rad felmeddelandet visas för.

    Cryptoklassen
    Kod:
    class Crypto {
            private static readonly byte[] SALT = Encoding.ASCII.GetBytes("12345678");
    
            public static string Encrypt(string textToEncrypt, string encryptionPassword)
            {
                var algorithm = GetAlgorithm(encryptionPassword);
    
                byte[] encryptedBytes;
                using (ICryptoTransform encryptor = algorithm.CreateEncryptor(algorithm.Key, algorithm.IV))
                {
                    byte[] bytesToEncrypt = Encoding.UTF8.GetBytes(textToEncrypt);
                    encryptedBytes = InMemoryCrypt(bytesToEncrypt, encryptor);
                }
                return Convert.ToBase64String(encryptedBytes);
            }
    
            public static string Decrypt(string encryptedText, string encryptionPassword)
            {
                var algorithm = GetAlgorithm(encryptionPassword);
                byte[] decryptedBytes;
                using (ICryptoTransform decryptor = algorithm.CreateDecryptor(algorithm.Key, algorithm.IV))
                {
                    byte[] encryptedBytes = Convert.FromBase64String(encryptedText);
                    decryptedBytes = InMemoryCrypt(encryptedBytes, decryptor);
                }
                return Encoding.UTF8.GetString(decryptedBytes);
            }
    
            private static byte[] InMemoryCrypt(byte[] data, ICryptoTransform transform)
            {
                MemoryStream memory = new MemoryStream();
                using (Stream stream = new CryptoStream(memory, transform, CryptoStreamMode.Write))
                {
                    stream.Write(data, 0, data.Length);
                }    // <-- HÄR KOMMER FELMEDDELANDET
                return memory.ToArray();
            }
    
            private static RijndaelManaged GetAlgorithm(string encryptionPassword)
            {
                var key = new Rfc2898DeriveBytes(encryptionPassword, SALT);
    
                var algorithm = new RijndaelManaged();
                int bytesForKey = algorithm.KeySize / 8;
                int bytesForIV = algorithm.BlockSize / 8;
                algorithm.Key = key.GetBytes(bytesForKey);
                algorithm.IV = key.GetBytes(bytesForIV);
                return algorithm;
            }
        }
    }
    Kod för att spara och läsa filinnehåll
    Kod:
    public void SaveToFile(string Filename, string Password)
    {
        string contents = Crypto.Encrypt("Testar lite", Password);
        System.Windows.Forms.MessageBox.Show(Crypto.Decrypt(contents, Password)); // Funkar, får "Testar lite" i en messagebox.
        System.IO.File.WriteAllText(Filename, contents, Encoding.UTF8);
    }
    
    public void LoadFromFile(string Filename, string Password)
    {
        string contents = System.IO.File.ReadAllText(Filename, Encoding.UTF8);
        System.Windows.Forms.MessageBox.Show(Crypto.Decrypt(contents, Password)); // Funkar inte, Unhandled CryptographicException enligt ovan
    }
    "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

  • #2
    Och felet var ju lite pinsamt ... lösenordet för filen hashades vid kryptering, men jag hade missat att göra det vid dekryptering.
    "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

    Kommentera

    Working...
    X