Avatar billede 3ddd Nybegynder
03. januar 2006 - 19:24 Der er 20 kommentarer og
1 løsning

Eksempel på kryptering af en string

Hej...

Jeg er interesseret i et eksempel på den nemmeste måde, at kryptere og dekryptere indholdet af en string.

Hvilken form for kryptering er ikke specielt vigtig, bare det er til at finde ud af hvordan jeg skal bruge det.

På forhånd tak =)
Avatar billede arne_v Ekspert
03. januar 2006 - 19:30 #1
Følgende er ret simpelt:

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 3ddd Nybegynder
03. januar 2006 - 20:03 #2
Kunne jeg få dig til, hurtig at kommentere linjerne gør?

byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
Hvad er denne linje bla. til for? kan det sammenlignes med Iv's på wireless forbindelser?

Hvor/hvordan finder jeg den krypterede del, og får det i en string, så jeg kan gemme det el. ?
Avatar billede arne_v Ekspert
03. januar 2006 - 20:06 #3
iv er initialization vector

den skal bare have en værdi

du kunne også bruge 16 gange 0
Avatar billede arne_v Ekspert
03. januar 2006 - 20:07 #4
plain1 = input kryptering
cipher = output kryptering = input dekryptering
plain2 = output dekryptering
Avatar billede 3ddd Nybegynder
03. januar 2006 - 20:20 #5
Det virker helt perfekt =)

Er dog lidt i tvivl om dekryptering... Hvad gør jeg hvis jeg lukke programmet, efter at have gemt det krypterede, og så senere vil dekrypter, har jeg lidt svært ved at gennemskue hvordan jeg så gør?

String plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length));
Ville jeg bare kunne udskifte CHIPHER, med en string, hvor jeg har læst det der skal dekrypteres ind i?
Avatar billede arne_v Ekspert
03. januar 2006 - 20:28 #6
så længe at du kender key og iv kan du altid dekryptere
Avatar billede arne_v Ekspert
03. januar 2006 - 20:28 #7
ja (borset fra at cipher er et byte array og ikke en string fordi den kan indeholde
ikke printable karakterer)
Avatar billede 3ddd Nybegynder
03. januar 2006 - 20:35 #8
Okaaaay, kan du hjælpe mig med hvordan, jeg så læser fra fx en txt fil, med det krypterede tekst, tilbage i et byte array?

Er det nødvendig for dekrypteringen med alle de nye linjer, eller kan den finde ud af det, hvis det bare er en lang strøm af tal?
Avatar billede arne_v Ekspert
03. januar 2006 - 20:44 #9
der skal ikke være nogen "ekstra" linie skift

ren strøm af bytes

når du skal læse er det vel bare

Stream f = new FileStream(filename, FileMode.Open);

og så læse fra den !?!?
Avatar billede 3ddd Nybegynder
03. januar 2006 - 20:58 #10
De "ekstra" linjer kommer når jeg køre programmet:
1
113
48
204
227
146
118
200
38
182
82
159
193
136
189
235
34
199
232
46
228
41
215
Dette er en lille test
Press any key to continue . . .


Og tænkte om den ville kunne bruge tallede ud i en køre?:
1113482042271461182003818282159193136189235341992324622841215

Uanset hvad, det virker, og du har været en stor hjælp! Smid dit svar =)
Avatar billede arne_v Ekspert
03. januar 2006 - 21:02 #11
det er fordi mit program skriver det byte array ud som tal

det skal du ikke de skal udskrive direkte som bytes
Avatar billede 3ddd Nybegynder
03. januar 2006 - 21:08 #12
"det skal du ikke de skal udskrive direkte som bytes"
Hvad mener du men at de skal skrives direkte ud?
Avatar billede arne_v Ekspert
03. januar 2006 - 21:10 #13
Stream f = new FileStream(filename, FileMode.CreateNew);
f.Write(cipher, 0, cipher.Length);
f.Close();
Avatar billede 3ddd Nybegynder
03. januar 2006 - 21:14 #14
Okaay så kan jeg se forskelten, nu får jeg: øØA_ÚÒiq0Ìã’vÈ&¶RŸÁˆ½ë"Çè.ä)×, ud af det =)

Når jeg så senere vil finde den oprindelige tekst, hvad gør jeg så?
Avatar billede arne_v Ekspert
03. januar 2006 - 21:26 #15
Du læser ind med:

Stream f = new FileStream(filename, FileMode.Open);
f.Read(cipher, 0, cipher.Length);
f.Close();

og dekrypterer så.
Avatar billede 3ddd Nybegynder
03. januar 2006 - 21:34 #16
Perfekt! nu køre det bare der ud af =)
Avatar billede arne_v Ekspert
03. januar 2006 - 21:43 #17
så ligger jeg et svar
Avatar billede 3ddd Nybegynder
03. januar 2006 - 22:47 #18
Lige et lille spørgsmpl til, skal IV'en være den samme?

Altså hvis nu, et program bruger en eller anden iv, og jeg så ikke kender den i mit program? ville det så stadig virke?
Avatar billede arne_v Ekspert
03. januar 2006 - 22:51 #19
ja
nej
iv skal være den samme ved både kryptering og dekryptering
Avatar billede 3ddd Nybegynder
04. januar 2006 - 00:34 #20
OKaay takker =)

Det virker fint ellers, spændende at arbejde med =)

Synes dog håndtering af filer og dir's, læsning og skrivning er ret forvidende, hvorfor er der så mange forskellige IO måder, er der ikke bare en der dækker det hele?

Stream f = new FileStream(sti, FileMode.Open);
FileStream fs = (FileStream)saveFileDialog1.OpenFile();
StreamWriter st = new StreamWriter(fs);
using (StreamReader streamReader = new StreamReader(openFileDialog.FileName))

Et lille udpluk af, et lille test projekt(notepat), opbygget af en del forskellige kodestumper, fundet forskellige steder.

Finder der ikke en, der kan det hele, på en måde. skrive og læse, åbne og lave dir's? eller nogen der har dokumenteret dem, og ved hvad der er bedst at bruger til de forskellige opgaver
Avatar billede arne_v Ekspert
05. januar 2006 - 11:26 #21
Stream er low level og læser og skriver bytes
StreamWriter skriver tekst linier
StreamReader læser tekst linier
FileStream er en Stream for en disk fil (man kan også få en Stream fra en netværks forbindelse)
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