13. december 2002 - 17:02Der er
11 kommentarer og 2 løsninger
Dekryptering
Hej eksperter, Jeg sidder lidt og leger med noget kryptering/dekryptering med RSA-algoritmen.
Jeg har fået krypteringen til at virke ved at putte 16 bytes ad gangen ind i mit RSACryptoServiceProvider-objekt fra System.Security.Cryptography. However, jeg kan ikke få dekryptering til at virke - den siger hele tiden at den får forkerte data.
Jeg konverterer output/input til/fra Base64, da brugere skal kunne kopiere/indsætte krypteret tekst og nemt dekryptere det.
Dette er som min dekrypteringsfunktion ser ud nu, men jeg ved at den ikke holder, især ikke delen med byte[] c-arrayet...
public string Decrypt(string keyfile, string data) { FileStream fs = new FileStream(keyfile, FileMode.Open, FileAccess.Read, FileShare.Read); StreamReader r = new StreamReader(fs, Encoding.UTF8, true); string key = r.ReadToEnd(); r.Close(); fs.Close();
CspParameters csp = new CspParameters(); rsa = new RSACryptoServiceProvider(keysize, csp); rsa.FromXmlString(key);
string decrypted = ""; int i = 0; byte[] input = Convert.FromBase64String(data); while (i <= input.Length) { byte[] c = {input[i], input[i+1], input[i+2], input[i+3], input[i+4], input[i+5], input[i+6], input[i+7], input[i+8], input[i+9], input[i+10], input[i+11], input[i+12], input[i+13], input[i+14], input[i+15]}; MessageBox.Show(Encoding.ASCII.GetString(c)); decrypted += Encoding.ASCII.GetString(rsa.Decrypt(c, false)); i = i+16; }
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg kan sagtens få mit program til at kryptere/dekryptere små mængder data. Det er også lykkedes mig at kryptere en tekst ved at nøjes med at kryptere en del af den af gangen og så stykke det hele sammen til sidst, men det kan ikke dekrypteres igen.
okai jeg vil gå i tænkebox. Spændende problem. Bare som en side bemærkning, RSA benyttes i praksis ikke til at kryptere store datamængder. Fx. i SSL etc benyttes RSA til at udveksle nøgler hvorefter selv "payloaden" krypteres med en blockcipher.
Her er noget kode, der vil hjælpe. Koden bruger RijnDael (AES). Du skal selv lave en key og en initialiseringsvektor (IV). Kig på RijndaelManaged.CreateEncryptor(). Encrypt returner en base64 encoded streng og decrypt forventer en base64 encode streng.
bechmann >> Tusind tak for koden, men den er symmetrisk... Jeg kan nok godt bruge den i begrænset omfang, men der er ikke så meget pointe i det. Desværre understøtter asymmetriske algoritmer ikke CryptoStream, det ville ellers gøre det en del nemmere...
Hej Simon Jeg forstår ikke, at du ikke kan bruge koden. Hvis jeg skulle bruge RSA ville det eneste jeg ville gøre med den være at udveksle nøgler til en symmetrisk algoritme, som så blev brugt til kryptering/dekryptering. Kan du ikke fortælle, hvorfor du insisterer på at bruge en asymmetrisk algoritme?
For at lave det bruger du RSA til at verificere, hvem det er i den anden ende. Når det er gjort udveksler du nøgler til symmetrisk algoritme. Det data du skal have overført krypterer du så med den symmetriske algoritme. Kig på denne side: http://developer.netscape.com/tech/security/ssl/howitworks.html
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.