---
title: "C# - Problem att spara och återläsa krypterad sträng"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/190630-c-problem-att-spara-och-återläsa-krypterad-sträng"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "metalboy"
published: "2012-11-07T09:20:30.000Z"
updated: "2012-11-08T11:18:00.000Z"
replies: 1
views: 1796
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/190630-c-problem-att-spara-och-återläsa-krypterad-sträng"
---

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

## #1 — metalboy, 2012-11-07T09:20Z

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-and-Decrypt-a-string-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

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

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

Permalänk: https://www.webforum.nu/p/190630

## #2 — metalboy, 2012-11-08T11:18Z

Och felet var ju lite pinsamt ... lösenordet för filen hashades vid kryptering, men jag hade missat att göra det vid dekryptering.

Permalänk: https://www.webforum.nu/p/2305870

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/190630-c-problem-att-spara-och-återläsa-krypterad-sträng
