Avatar billede heh_itgrp Nybegynder
17. juni 2003 - 01:37 Der er 2 kommentarer og
1 løsning

Kryptering (eller scrambling)

Jeg skal lave en kryptering og dekryptering af et password.
Der skal komme samme antal ud som der kommer ind.
Jeg har prøvet med mange forskellige algoritmer, men problemet er at jeg skal holde mig indenfor ascii 32 - 127. Ellers går der ged i den når jeg smider det krypterede password ned i en Paradox database.
Feltet i databasen er 10 tegn String, og der er et par tusinde installationer ude, så jeg skal helst holde mig fra at ændre i databasen.

Er der nogle gode forslag...jeg er ikke den skarpeste til matematik.
Avatar billede arne_v Ekspert
17. juni 2003 - 07:40 #1
Så vidt keg kan kan du vælge mellem:

1)  moderne krypterings algoritme og konvertering til 32-127 bagefter

    f.eks. 3DES eller AES og så konvertering til base64

    fordele:
      giver 32-127
      sikker

    ulemper:
        +33% i længde

2)  gammel krypterings algoritme hvor output per selve algoritmen
    holdes 32-127

    fordele:
      giver 32-127
      beholder længde

    ulemper:
        ikke sikker (=kun obfuscering)

    Se seksempel nedenfor:

program Crypt;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function encrypt(tekst,kode:string):string;

var
  I: integer;

begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(32+((ord(tekst[I])-32)+(ord(kode[(I mod length(kode))+1])-32)) mod 96);
  end;
  result := tekst;
end;

function decrypt(tekst,kode:string):string;

var
  I: integer;

begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(32+(96 + (ord(tekst[I])-32)-(ord(kode[(I mod length(kode))+1])-32)) mod 96);
  end;
  result := tekst;
end;

var
  t : string;

begin
    t := 'Dette er en proeve';
    writeln(t);
    writeln(encrypt(t, 'hemmeligt'));
    writeln(decrypt(t, 'hemmeligt'));
    writeln(decrypt(encrypt(t, 'hemmeligt'), 'hemmeligt'));
    writeln(encrypt(decrypt(t, 'hemmeligt'), 'hemmeligt'));
end.


At knække den form for kode har været kendt i mere end 100 år,
men den kan ikke læses fra databasen med en SELECT statement.
Avatar billede arne_v Ekspert
17. juni 2003 - 07:42 #2
Og jeg tror at det bliver meget svært at finde en moderne krypetrings
algoritme der holder sig 32-127. De er normalt designet til at håndtere
generelle input og output. De bruger meget ofte XOR og den har nogle
kedelige egenskaber i 32-127 sammenhæng.
Avatar billede heh_itgrp Nybegynder
17. juni 2003 - 08:09 #3
Hej arne

tak for dit svar. Det var lige præcis det jeg søgte.
Ingen problemer med at hølde det ned i databasen.

det var sq dejligt. Nu har jeg siddet og keglet med det i 1½ dag

Du har fortjent dine point.

//heh
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