szyfrowanie string'ów

Odpowiedz Nowy wątek
2006-08-27 20:05
0

Witam,
Macie/znacie może jakiś sprawdzony, bezpieczny algorytm szyfrujący i deszyfrujący??:)
Chce zrobić formatke z 2 buttonami i 1 textboxem - 1 button miałby kodować text z textboca - a 2 dekodować... Docelowo chciałbym to wykorzystać do szyfrowania danych w pliku (loginy do bazy)...
Możecie mi jakoś pomóc - może jakiś przykład czy coś ??:)

z góry dzięki za pomoc,
pozdrawiam North:)

Pozostało 580 znaków

2006-08-27 20:21
0

Loginy, jeśli można, to zalecam hashować. MD5CryptoServiceProvider z System.Security.Cryptography będzie tu pomocny (ewentualnie SHA1 czy coś innego).

W tej samej przestrzeni znajdziesz też wszystko co potrzebne do kodowania.

Pozostało 580 znaków

2006-08-27 20:28
0

tylko jak zakoduje MD5 to nie odkoduje :/ a ja potrzebuje możliwość kodowaina i dekodowania.... :/

Pozostało 580 znaków

2006-08-27 20:29
0

W takim razie np. AES, o ile pamietam jest w tej samej przestrzeni.

//edit
w kregach c# i msdn znany jako Rijndael :)

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-08-27 21:07
0

No i znalazłem ten algorytm:

private void button1_Click(object sender, EventArgs e)
        {
            string original = "To jest testowy string!!!!";
            string roundtrip;
            ASCIIEncoding textConverter = new ASCIIEncoding();
            RijndaelManaged myRijndael = new RijndaelManaged();
            byte[] fromEncrypt;
            byte[] encrypted;
            byte[] toEncrypt;
            byte[] key;
            byte[] IV;
 
            myRijndael.GenerateKey();
            myRijndael.GenerateIV();
 
            key = myRijndael.Key;
            IV = myRijndael.IV;
 
            ICryptoTransform encryptor = myRijndael.CreateEncryptor(key, IV);
 
            MemoryStream msEncrypt = new MemoryStream();
            CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
 
            toEncrypt = textConverter.GetBytes(original);
 
            csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
            csEncrypt.FlushFinalBlock();
 
            encrypted = msEncrypt.ToArray();
            ICryptoTransform decryptor = myRijndael.CreateDecryptor(key, IV);
 
            MemoryStream msDecrypt = new MemoryStream(encrypted);
            CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
 
            fromEncrypt = new byte[encrypted.Length];
 
            csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
 
            roundtrip = textConverter.GetString(fromEncrypt);
 
            textBox1.Text = original;
            textBox2.Text = XXXXXXXXXXXXXXXXXX
        }

Kodowany ciąg znaków to: "To jest testowy string!!!!" a co jest zakodowaną wartością??


http://pl.wikipedia.org/wiki/Rijndael - znalazłem w opisie że ten algorytm może szyfrować 128, 192 i 256 bitów - w ilu bitach szyfruje ten kod??

Pozostało 580 znaków

2006-08-27 21:13
0

Tak jak w kazdym takim algorytmie odpowiedzia jest ciag bajtow (wejscie rowniez :))

Mozesz wiec zapisac jak leci, mozesz przekonwertowac na hex'a, co bedzie wygodniej.

znalazłem w opisie że ten algorytm może szyfrować 128, 192 i 256 bitów - w ilu bitach szyfruje ten kod??

Wspiera kazda wersje - wlasciwosc KeySize. Wszystko napisane w msdn :)

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-08-27 21:16
0

ja się dopiero ucze C# a Ty mi tu z hex'ami wyskakujesz;)

wiesz może która zmienna przechowuje zakodowany tekst??;)

Pozostało 580 znaków

2006-08-27 21:22
0

Rowniez w msdn jest jasniejszy przyklad:

    public static void EncryptTextToFile(String Data, String FileName, byte[] Key, byte[] IV)
    {
        try
        {
            // Create or open the specified file.
            FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);

            // Create a new Rijndael object.
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a CryptoStream using the FileStream 
            // and the passed key and initialization vector (IV).
            CryptoStream cStream = new CryptoStream(fStream,
                RijndaelAlg.CreateEncryptor(Key, IV),
                CryptoStreamMode.Write);

            // Create a StreamWriter using the CryptoStream.
            StreamWriter sWriter = new StreamWriter(cStream);

            try
            {
                // Write the data to the stream 
                // to encrypt it.
                sWriter.WriteLine(Data);
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: {0}", e.Message);
            }
            finally
            {
                // Close the streams and
                // close the file.
                sWriter.Close();
                cStream.Close();
                fStream.Close();
            }
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
        }
        catch (UnauthorizedAccessException e)
        {
            Console.WriteLine("A file error occurred: {0}", e.Message);
        }

    }

z ktorego wynika, ze wystarczy zapisac do stworzonego strumienia CryptoStream dane, zeby je zaszyfrowac. W takim razie odczytaj pozniej z niego i dostaniesz prawdopodobnie zaszyfrowany tekst. Zeby sie przekonac, ze odczytales wlasciwe pozniej je zdeszyfruj :)

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-08-27 21:51
0

qurcze, chyba sobie z tym nie poradze...:/

Pozostało 580 znaków

2006-08-27 22:15
0

wiecie może w czym jest przechowywana zakodowana wartość tego stringu (kod z góry) - i jak to wyświetlić w messageBoxie??

dzięki za ten 2 kod - tylko tego Twojego <ort>w ogóle </ort>nie kumam :(

Pozostało 580 znaków

2006-08-27 22:39
0

Nie ma to jak z motyka na slonce :P

Stworz Console Application i pusc to:

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

class RijndaelSample
{
    static void Main()
    {
        try
        {
            Rijndael RijndaelAlg = Rijndael.Create();
            string sData = "Here is some data to encrypt.";
            byte [] encrypted = EncryptText(sData, RijndaelAlg.Key, RijndaelAlg.IV);
            String Key = "";
            String IV = "";
            String encryptedString = "";
            foreach(byte Byte in RijndaelAlg.Key)
                Key += Byte.ToString("x2");
            foreach(byte Byte in RijndaelAlg.IV)
                IV += Byte.ToString("x2");
            foreach(byte Byte in encrypted)
                encryptedString += Byte.ToString("x2");

            Console.WriteLine("Key: " + System.Text.Encoding.ASCII.GetString(RijndaelAlg.Key) + " hex: " + Key);
            Console.WriteLine("IV: " + System.Text.Encoding.ASCII.GetString(RijndaelAlg.IV) + " hex: " + IV);
            Console.WriteLine("Encrypted: " + System.Text.Encoding.ASCII.GetString(encrypted) + " hex: " +encryptedString);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        Console.ReadLine();
    }

    public static byte[]  EncryptText(String Data, byte[] Key, byte[] IV)
    {
        byte[] ret = null;
        try
        {
            MemoryStream fStream = new MemoryStream();
              Rijndael RijndaelAlg = Rijndael.Create();
            CryptoStream cStream = new CryptoStream(fStream,
                RijndaelAlg.CreateEncryptor(Key, IV),
                CryptoStreamMode.Write);
            StreamWriter sWriter = new StreamWriter(cStream);
            try
            {
                sWriter.WriteLine(Data);
                sWriter.Flush();
                ret = fStream.ToArray();
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: {0}", e.Message);
            }
            finally
            {
                sWriter.Close();
                cStream.Close();
                fStream.Close();
            }
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
        }
        return ret;
    }
}

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0