Witam próbuję zaszyfrować i odszyfrować w dowolnie odległym czasie tekst. Czyli prócz zaszyfrowania potrzebuję przechowywać gdzieś klucz i wektor tak??. Wydaje mi się, że napisałem kod poprawnie, aczkolwiek po odszyfrowaniu nie uzyskuje wejściowego tekstu. Nie wiem gdzie tkwi błąd. Help
Oto kod:

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace algorytm_rijndaela
{
    public sealed class CryptoString
    {
        private static byte[] klucz()
        {
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            return (encoding.GetBytes("kLHVGFFKLHsdkfh9q910udf0usDFA/sv"));
        }

        private static byte[] wektor()
        {
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            return (encoding.GetBytes("asgfreqwe_>:{}>?"));
        }

        private CryptoString() { }

        private static byte[] savedKey = klucz();
        private static byte[] savedIV = wektor();

        public static byte[] key
        {
            get { return savedKey; }
            set {savedKey = value;}
        }

        public static byte[] IV
        {
            get { return savedKey; }
            set { savedIV = value; }
        }

        private static void RdGenerateSecretKey(RijndaelManaged rdProvider)
        {
            if (savedKey == null)
            {
                rdProvider.KeySize = 256;
                rdProvider.GenerateKey();
                savedKey = rdProvider.Key;
            }
        }

        private static void rdGenerateSecredInitVector(RijndaelManaged rdProvider)
        {
            if (savedIV == null)
            {
                rdProvider.GenerateIV();
                savedIV = rdProvider.IV;
            }
        }

        public static string Encrypt(string originalStr)
        {
            byte[] originalStrAsByte = Encoding.ASCII.GetBytes(originalStr);
            byte[] originalBytes = { };

            MemoryStream memStream = new MemoryStream(originalStrAsByte.Length);

            RijndaelManaged rijndael = new RijndaelManaged();
            RdGenerateSecretKey(rijndael);
            rdGenerateSecredInitVector(rijndael);
            if (savedKey == null || savedIV == null)
            {
                throw (new NullReferenceException("Klucz savedKey i wektor inicjujący nie mogą być puste"));
            }
            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
            Console.Write("klucz : ");
            Console.WriteLine(enc.GetString(savedKey) + " " + savedKey.Length.ToString());
            Console.Write("wektor : ");
            Console.WriteLine(enc.GetString(savedIV) + " " + savedIV.Length.ToString());
            Console.ReadKey();
            ICryptoTransform rdTransform = rijndael.CreateEncryptor((byte[])savedKey.Clone(), (byte[])savedIV.Clone());

            CryptoStream cryptoStream = new CryptoStream(memStream, rdTransform, CryptoStreamMode.Write);

            cryptoStream.Write(originalStrAsByte, 0, originalStrAsByte.Length);
            cryptoStream.FlushFinalBlock();
            originalBytes = memStream.ToArray();
            memStream.Close();
            cryptoStream.Close();

            rdTransform.Dispose();
            rijndael.Clear();

            string encryptedStr = Convert.ToBase64String(originalBytes);

            return (encryptedStr);
        }

        public static string decrypt(string encryptedStr)
        {
            byte[] encryptedStrAsBytes = Convert.FromBase64String(encryptedStr);
            byte[] initialText = new byte[encryptedStrAsBytes.Length];

            RijndaelManaged rijndael = new RijndaelManaged();
            MemoryStream memStream = new MemoryStream(encryptedStrAsBytes);
            if (savedKey == null || savedIV == null)
            {
                throw (new NullReferenceException("Klucz savedKey i wektor inicjujący nie mogą być puste"));
            }

            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
            Console.Write("klucz : ");
            Console.WriteLine(enc.GetString(savedKey) + " " + savedKey.Length.ToString());
            Console.Write("wektor : ");
            Console.WriteLine(enc.GetString(savedIV) + " " + savedIV.Length.ToString());
            Console.ReadKey();

            ICryptoTransform rdTransform = rijndael.CreateEncryptor((byte[])savedKey.Clone(), (byte[])savedIV.Clone());
            CryptoStream cryptoStream = new CryptoStream(memStream, rdTransform, CryptoStreamMode.Read);
            cryptoStream.Read(initialText, 0, initialText.Length);

            memStream.Close();
            cryptoStream.Close();

            rdTransform.Dispose();
            rijndael.Clear();

            string decryptedStr = Encoding.ASCII.GetString(initialText);
            return (decryptedStr);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string tekst = "afvgsafg23534wt";
            string zaszyfruj = CryptoString.Encrypt(tekst);
            Console.WriteLine("Hasło: " + tekst + "  " + " Zaszyfrowane: " + zaszyfruj);
            StreamWriter plik_1 = new StreamWriter("d:\\plik.txt");
            plik_1.Write(zaszyfruj);
            plik_1.Close();

            StreamReader plik_2 = new StreamReader("d:\\plik.txt");
            string odszyfruj = plik_2.ReadLine();
            plik_2.Close();
            Console.WriteLine("Hasło: " + odszyfruj);
            Console.Write("Odszyfrowane: " + CryptoString.decrypt(odszyfruj));

            Console.ReadKey();
        }
    }
}


przykład napisany w Visual Studio 2005

heh znalazłem byka o jezu jezu :) nie będe pisał gdzie. Temat można usunąc, wola moderatora u mnie już działa :)