Avatar billede repsak Nybegynder
17. juli 2004 - 22:32 Der er 12 kommentarer og
1 løsning

2 vejs kryptering

Er der nogle som kan poste et simpelt eksempel på at kryptere en tekst samt dekryptere den? Vha. .NETs klasser. Jeg er lidt lost i kryptering :-(
Avatar billede arne_v Ekspert
17. juli 2004 - 23:04 #1
Det må kunne gøres på mange måder.

Men her er et lille eksempel jeg lige har bikset udfra docs:

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

class MainClass
{
    public static void Main(string[] args)
    {
        Encoding utf = new UTF8Encoding();
        DES des = new DESCryptoServiceProvider();
        byte[] key = utf.GetBytes("hemmelig");
        byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
        ICryptoTransform encrypt = des.CreateEncryptor(key, iv);
        String plain1 = "Dette er en lille test";
        byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain1), 0, utf.GetByteCount(plain1));
        for(int i = 0; i < cipher.Length; i++)
        {
            Console.WriteLine(cipher[i]);
        }
        ICryptoTransform decrypt = des.CreateDecryptor(key, iv);
        String plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
        Console.WriteLine(plain2);
    }
}
Avatar billede arne_v Ekspert
17. juli 2004 - 23:06 #2
Til seriøs brug skal DES nok erstattes med Rijndael eller TripleDES.
Avatar billede arne_v Ekspert
17. juli 2004 - 23:09 #3
Her er den samme kode med 3DES:

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

class MainClass
{
    public static void Main(string[] args)
    {
        Encoding utf = new UTF8Encoding();
        TripleDES des3 = new TripleDESCryptoServiceProvider();
        byte[] key = utf.GetBytes("hemmeligabcdefgh12345678");
        byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
        ICryptoTransform encrypt = des3.CreateEncryptor(key, iv);
        String plain1 = "Dette er en lille test";
        byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain1), 0, utf.GetByteCount(plain1));
        for(int i = 0; i < cipher.Length; i++)
        {
            Console.WriteLine(cipher[i]);
        }
        ICryptoTransform decrypt = des3.CreateDecryptor(key, iv);
        String plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
        Console.WriteLine(plain2);
    }
}
Avatar billede arne_v Ekspert
17. juli 2004 - 23:13 #4
Og med Rijndael alias AES:

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

class MainClass
{
    public static void Main(string[] args)
    {
        Encoding utf = new UTF8Encoding();
        Rijndael aes = new RijndaelManaged();
        byte[] key = utf.GetBytes("hemmeligabcdefgh12345678");
        byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
        ICryptoTransform encrypt = aes.CreateEncryptor(key, iv);
        String plain1 = "Dette er en lille test";
        byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain1), 0, utf.GetByteCount(plain1));
        for(int i = 0; i < cipher.Length; i++)
        {
            Console.WriteLine(cipher[i]);
        }
        ICryptoTransform decrypt = aes.CreateDecryptor(key, iv);
        String plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
        Console.WriteLine(plain2);
    }
}
Avatar billede arne_v Ekspert
17. juli 2004 - 23:13 #5
Og et svar
Avatar billede repsak Nybegynder
18. juli 2004 - 00:17 #6
Fantastisk - intet mindre...
Det er til seriøst brug, så super at du fik de andre med.
Ligger der noget i at du har valgt UTF8Encoding() ?
Avatar billede arne_v Ekspert
18. juli 2004 - 09:59 #7
Ikke andet end at det skulle være noget som kan klare ÆØÅ.
Avatar billede repsak Nybegynder
18. juli 2004 - 11:18 #8
oki - tak for hjælpen (igen)
Avatar billede repsak Nybegynder
29. juli 2004 - 22:42 #9
hmm hvordan lægger man et byte[] i en database?
Avatar billede arne_v Ekspert
29. juli 2004 - 22:46 #10
Eksempel (MySQL og billede - men det skulle ikke betyde noget):

MySqlCommand ins = new MySqlCommand("INSERT INTO pics VALUES (@id, @pic)", con);
ins.Parameters.Add("@id", MySqlDbType.Int);
ins.Parameters.Add("@pic", MySqlDbType.MediumBlob);
ins.Parameters["@id"].Value = i;
byte[] data = new Byte[picsize];
// fill data
ins.Parameters["@pic"].Value = data;
ins.ExecuteNonQuery();
Avatar billede repsak Nybegynder
30. juli 2004 - 00:26 #11
kan man ikke lave det til en streng så kan kan indskrive det direkte i sql? (afspille logfil)
Avatar billede arne_v Ekspert
30. juli 2004 - 07:26 #12
Så skal du base64 encode det eller sådan noget.
Avatar billede repsak Nybegynder
30. juli 2004 - 09:43 #13
ok, jeg har valgt at fortsætte i en ny tråd :-)
http://www.eksperten.dk/spm/524668
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester