Avatar billede amews_aj Nybegynder
08. september 2006 - 20:18 Der er 12 kommentarer og
1 løsning

kryptering og dekryptering af string?

Hvordan krypterer jeg noget i C#, og hvordan dekrypterer jeg det igen?
Det drejer som en en helt almindelig string.

Har søgt lidt på det, men kan ikke finde noget.
Avatar billede Slettet bruger
08. september 2006 - 21:09 #1
Hejsa.

Prøv med noget i retning af:
Encrypt(string clearText, string Password);

Og

Decrypt(string clearText, string Password);
Avatar billede Slettet bruger
08. september 2006 - 21:17 #2
Hejsa.

Jeg var nok en smule for hurtig her :-)

Tjek evt. http://www.codeproject.com/dotnet/DotNetCrypto.asp

Jeg har selv arbejdet en smule med det, men i en anden sammenhæng, hvor jeg krypterer en streng i en cookie via formsauthentication:

string encryptedTicket = null;

FormsAuthenticationTicket cookieTicket = new FormsAuthenticationTicket(1, userId.ToString(), timeLogin, timeExpire, false, role);

encryptedTicket = FormsAuthentication.Encrypt(cookieTicket);
Avatar billede arne_v Ekspert
08. september 2006 - 21:41 #3
et simpelt AES eksempel fra lageret:

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
08. september 2006 - 21:42 #4
I nogle tilfælde vil du hexificere eller base64 encode byte arrayet for at
få en string ud af det
Avatar billede amews_aj Nybegynder
08. september 2006 - 22:37 #5
arne_v jeg skal bruge en sammenhængende ting...
Altså den krypterede del skal være sammenhængende.
Avatar billede amews_aj Nybegynder
08. september 2006 - 22:46 #6
arne_v jeg fandt et script fra et andet spørgsmål som du også har været med i:

    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 plain = "Dette er en lille test";
        Console.WriteLine(plain);
        byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain), 0, utf.GetByteCount(plain));
        string cipherb64 = Convert.ToBase64String(cipher);
        Console.WriteLine(cipherb64);
        ICryptoTransform decrypt = des.CreateDecryptor(key, iv);
        byte[] cipher2 = Convert.FromBase64String(cipherb64);
        string plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher2, 0, cipher.Length));
        Console.WriteLine(plain2);
    }

Det er mere det jeg vil have
men hvordan ændre man på key og iv, og hvad betyder det?
Jeg får bare en exception hvis jeg begynder at ændre i dem.
Avatar billede amews_aj Nybegynder
09. september 2006 - 00:22 #7
Sådan nu har jeg lavet dit første eksempel lidt om, og nu virker det som jeg vil have det til, smid et svar..

Kode:
        public void krypt(string action, string what_to_en_decrypt)
        {
            Encoding utf = new UTF8Encoding();
            Rijndael aes = new RijndaelManaged();
            byte[] key = utf.GetBytes("abcdefghijklmnop");
            byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
            ICryptoTransform encrypt = aes.CreateEncryptor(key, iv);

            if (action == "encrypt")
            {
                byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(what_to_en_decrypt), 0, utf.GetByteCount(what_to_en_decrypt));
                cipherb64 = Convert.ToBase64String(cipher);
                ICryptoTransform decrypt = aes.CreateDecryptor(key, iv);
                plain_decrypt = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
            }
            else if (action == "decrypt")
            {
                ICryptoTransform decrypt = aes.CreateDecryptor(key, iv);
                byte[] cipher = Convert.FromBase64String(what_to_en_decrypt);
                plain_decrypt = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
          }
        }
Avatar billede arne_v Ekspert
09. september 2006 - 01:37 #8
ok
Avatar billede amews_aj Nybegynder
09. september 2006 - 01:45 #9
Her er dine point.. ;)
Avatar billede amews_aj Nybegynder
09. september 2006 - 01:47 #10
thomasso det er muligt at dit også ville have virket, men har ikke testet det da arne_v's var mere lige til at sætte ind..

Hvis du synes du burde have haft nogle point, så sig til og vi ordner det ;)
Avatar billede Slettet bruger
09. september 2006 - 14:23 #11
Helt i orden!
Det er løsningerne der tæller, ikke point :-)
Avatar billede amews_aj Nybegynder
09. september 2006 - 15:48 #12
Ja jeg er også enig, men mange her på eksperten er ikke, og dem må man jo tage højde for ;)
Avatar billede Slettet bruger
10. september 2006 - 21:13 #13
KLart klart!
Jeg har det nu sådan, at jeg som regel får den hjælp jeg skal bruge og så vil jeg meget gerne hjælpe andre hvis det er muligt.
Men nu har jeg så bare desværre ikke den store kompetence indenfor kryptering.

Men fedt at du fik løst dit problem :-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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