Avatar billede driis Nybegynder
03. november 2004 - 10:36 Der er 16 kommentarer og
1 løsning

Forslag til krypteringsmetode

I forbindelse med en form for adgangskontrol, jeg skal implementere, har jeg behov for at kryptere nogle oplysninger som senere skal dekrypteres af en 3. part.

Jeg har aldrig arbejdet med kryptering før. Men jeg går ud fra at jeg skal generere en nøgle, som 3. part skal kende. Jeg kan så kryptere informationerne, som igen kan dekrypteres af 3. part.

Mit problem er at vælge krypteringsalgoritme - jeg arbejder i ASP .NET og derfor vil det være fornuftigt at bruge en algoritme som direkte understøttes af frameworket. Men samtidig skal oplysningerne kunne dekrypteres af mange forskellige systemer på forskellige platforme, bl.a. .NET, alm. ASP, PHP med videre. Derfor leder jeg efter en algoritme som er nem at implementere for alle på alle platforme. Findes en sådan ?

Jeg har også overvejet selv at lave en simpel form for XOR kryptering. Hvor sikker er denne metode, forudsat at nøglen holdes hemmelig ?
Avatar billede arne_v Ekspert
03. november 2004 - 10:47 #1
Man skelner mellem symmetriske algoritmer hvor du krypterer med en nøgle og de andre
dekrypterer med samme nøgle, som skal hemmligholdes og assymetriske private public
key systemer, hvor du krypterer med deres public key som står på deres
web site og de så dekrypterer med deres private key.

Jeg vil tro at det er symmetrisk du leder efter.

De fleste standard algoritmer er implemneteret både i .NET, Java og C.

De mest oplagte efter min mening er:
  3DES
  AES

XOR med en key er ikke meget værd som security.
Avatar billede nielsbrinch Nybegynder
03. november 2004 - 13:00 #2
Et godt sted at starte med 3DES:

TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
Avatar billede bufferzone Praktikant
03. november 2004 - 13:00 #3
helt enig med Arne
Avatar billede driis Nybegynder
03. november 2004 - 16:31 #4
"De fleste standard algoritmer er implemneteret både i .NET, Java og C"

Jeg håbede lidt at finde en algoritme, som enten var direkte understøttet af de gængse server script sprog (ASP, PHP m.fl.), eller var nem at implementere i disse, således at jeg blev fri for at distribuere en komponent, som udfører dekrypteringen.

Det er selvfølgelig ikke det store problem at lave en .NET komponent til det, men det kræver jo så at .NET er understøttet på kundens server. Målet er at systemet skal være så nemt som muligt at gå til for en potentiel kunde, som muligt.
Avatar billede arne_v Ekspert
03. november 2004 - 19:50 #5
Nu nævnte jeg dem, da jeg er mere kendt i den slags sprog end ASP/PHP.

Jeg er ret sikker på at du kan finde dem i PHP og ASP også.
Avatar billede arne_v Ekspert
03. november 2004 - 19:52 #6
Hm.

I PHP er den slags vist en optional komponent jævnfør http://dk2.php.net/manual/en/ref.mcrypt.php
Avatar billede arne_v Ekspert
03. november 2004 - 19:53 #7
TripleDES = 3DES
RIJNDAEL = AES

og selv om det er optional er det ihvertfald gratis
Avatar billede arne_v Ekspert
03. november 2004 - 19:54 #8
Algoritmerne er kendte og selvfølgelih kan du implementere dem.

Men jeg tror at det kræver lidt arbejde.
Avatar billede arne_v Ekspert
03. november 2004 - 19:56 #9
Jeg kan ikke lige finde nogen ASP komponent men om nødvendigt kan man vel
bygge C kode til en Win32 DLL og tilgå den fra VBScript.
Avatar billede driis Nybegynder
03. november 2004 - 20:37 #10
OK, du må gerne smide et svar.
Avatar billede arne_v Ekspert
03. november 2004 - 20:39 #11
kommer her
Avatar billede arne_v Ekspert
03. november 2004 - 20:40 #12
Jeg har C# eksempler på både 3DES og AES (men docs er udmærkede og lige til at gå til)
Avatar billede driis Nybegynder
03. november 2004 - 21:55 #13
Jeg tror jeg har styr på 3DES i C#, men du må da alligevel gerne poste dit eksempel :-)
Avatar billede arne_v Ekspert
03. november 2004 - 22:10 #14
Koden er helt banal:

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 driis Nybegynder
14. november 2004 - 19:30 #15
Jeg har et lille spørgsmål til eksemplet, hvilken betydning har InitializationVector:
byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };

Og har det nogen betydning for sikkerheden, om denne holdes hemmelig ?
Avatar billede arne_v Ekspert
14. november 2004 - 20:03 #16
Kort svar: ja
Avatar billede arne_v Ekspert
14. november 2004 - 20:04 #17
Det kan endda godt betale sig at den ikke er konstant over tid.
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