Vinnaren i pepparkakshustävlingen!
2011-06-07, 12:52
  #1
Medlem
B4rrets avatar
Hejsan! Till att börja med så hade jag svårt att hitta rätt forum, men flytta tråden gärna!

Nu till mitt dilemma: Jag ska börja 3an i höst och med detta kommer ju projektarbetet. Jag tror att jag har bestämt mig för att göra en egen kryptering (algoritm?) ett första stadium tror jag är att kryptera meningar i cmd. Något i stil med:

Kod:
//Få input
//Leta efter orden encryp/decrypt
//Fråga efter lösenord
//Skriv ut det krypterade/okrypterade
//Vice versa

Funderar på att utveckla det mer senare med ev interface och liknande.

Några små frågor

1. Vilket språk rekomenderar ni till den här uppgiften?
Jag har pillrat lite med C++ för några år sedan och senast C#. Jag är inte en komplett rookie, men nära inpå.

2. Något uppslag hur man ska bygga upp en algoritm?
Jag har förstått så mycket som att en kryptering kan med fördel vara antingen symmetrisk eller asymmetrisk. Har funderat på symmetrisk. Jag har hittat en länk till en PDF där AES beskrivs ingående, men har inte haft tid att läsa allt.

Ser fram emot att få vägledning i mitt lilla projekt. Svarar mer än gärna på flera frågor!

Mvh.
Citera
2011-06-07, 15:51
  #2
Medlem
fixiefyllas avatar
har du tänkt tillämpa/implementera en redan existerande algoritm typ AES, RSA, etc? eller har du tänkt "hitta på" en egen? Det är stor skillnad, där det sistnämda har egentligen inget med programmering att göra utan är ett matematiskt problem.

Att på egen hand implementera en redan existerande algoritm är ingen barnlek heller om det ska göras säkert, men eftersom det det bara är till projektarbetet så spelar det nog inte så stor roll.. Språk spelar ingen större roll, använd det du är bekväm i.

Praxis är väl att om man ska använda kryptering till något vettigt så bör du använda "riktiga" bibliotek och för allt i världen inte hitta på något eget (som inte överlevt en öppen misshandel av den akademiska världen (& co) över lång tid dvs)

Överhuvud taget känns det som ett teoretiskt (och tråkigt..) projektarbete.. men vill du lära mer om kryptering så är det ju bara köra. Gräv ner dig i logik, s-boxar, primtal, slumptalsgeneratorer, elliptiska kurvor och annat mys. Det är jävligt intressant

Personligen hade jag nog valt att leka med några gamla krypton typ Vigenère så det inte blir så överjävligt mycket formler och matte..
Citera
2011-06-07, 16:14
  #3
Medlem
B4rrets avatar
Citat:
Ursprungligen postat av fixiefylla

Jag hade faktiskt tänkt att komma på en egen algoritm Det borde väll inte vara för svårt på en låg nivå, eller? Vad krävs av en algoritm på låg säkerhet resp hög? (Antar att svaret är väldigt långt.)

Ska kolla upp mer om de saker du nämnde, men om jag nu gör en egen algoritm, då måste jag ju "implantera" den i programmet, eller hur
Citera
2011-06-07, 17:36
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av B4rret
Jag hade faktiskt tänkt att komma på en egen algoritm Det borde väll inte vara för svårt på en låg nivå, eller? Vad krävs av en algoritm på låg säkerhet resp hög? (Antar att svaret är väldigt långt.)

Ska kolla upp mer om de saker du nämnde, men om jag nu gör en egen algoritm, då måste jag ju "implantera" den i programmet, eller hur
Du kan ju börja med att läsa den här artikeln (och de relevanta relaterade artiklarna)

http://en.wikipedia.org/wiki/Kerckhoffs's_Principle
Citera
2011-06-14, 11:23
  #5
Medlem
fixiefyllas avatar
Mycket läsa blir det om man ska roa sig med sånt
den här är rätt givande för AES; http://www.moserware.com/2009/09/sti...-advanced.html
haha.
Citera
2011-06-14, 12:52
  #6
Medlem
Här är en lösenords-kryptering jag skrev för några år sen till ett spel jag gjorde då. Skriven i C#, tänker inte skriva så mycket om den utan hoppas du kan använda den till visso för referens osv.

Kod:
public PasswordCryptpographer(string key)
        {
            
int seed 0;
            if (
key == "" || key == string.Empty)
                return;
            foreach (
byte num2 in Encoding.ASCII.GetBytes(key))
            {
                
seed += num2;
            }
            
msvcrt.msvcrt.srand(seed);
            
byte[] buffer = new byte[0x10];
            for (
int i 00x10i++)
            {
                
buffer[i] = (bytemsvcrt.msvcrt.rand();
            }
            for (
int j 10x100j++)
            {
                
this.key[2] = (bytej;
                
this.key[(2) + 1] = (byte) (buffer[15]);
            }
            for (
int k 10x100k++)
            {
                for (
int m k0x100m++)
                {
                    if (
this.key[(2) + 1] < this.key[(2) + 1])
                    {
                        
this.key[2] = (byte) (this.key[2] ^ this.key[2]);
                        
this.key[2] = (byte) (this.key[2] ^ this.key[2]);
                        
this.key[2] = (byte) (this.key[2] ^ this.key[2]);
                        
this.key[(2) + 1] = (byte) (this.key[(2) + 1] ^ this.key[(2) + 1]);
                        
this.key[(2) + 1] = (byte) (this.key[(2) + 1] ^ this.key[(2) + 1]);
                        
this.key[(2) + 1] = (byte) (this.key[(2) + 1] ^ this.key[(2) + 1]);
                    }
                }
            }
        }

        public 
byte[] Decrypt(byte[] data)
        {
            
byte[] buffer = new byte[data.Length];
            for (
int i 0data.Lengthi++)
            {
                
bool flag false;
                if (
data[i] == 0)
                {
                    return 
buffer;
                }
                
byte index this.key[data[i] * 2];
                if (
index >= 0x80)
                {
                    
index = (byte) (this.key[data[i] * 2] - 0x80);
                    
flag true;
                }
                
buffer[i] = (byte) (buffer[i] + scanCodeToVirtualKeyMap[index]);
                if ((!
flag && (buffer[i] >= 0x41)) && (buffer[i] <= 90))
                {
                    
buffer[i] = (byte) (buffer[i] + 0x20);
                }
            }
            return 
buffer;
        }

        public 
byte[] Encrypt(byte[] data)
        {
            
byte[] buffer = new byte[data.Length];
            for (
int i 0data.Lengthi++)
            {
                
byte num2 data[i];
                if ((
data[i] >= 0x61) && (data[i] <= 0x7a))
                {
                    
data[i] = (byte) (data[i] - 0x20);
                }
                
byte num3 virtualKeyToScanCodeMap[data[i]];
                if ((
num2 >= 0x41) && (num2 <= 90))
                {
                    
num3 = (byte) (num3 0x80);
                }
                for (
byte j 0<= 0xff= (byte) (1))
                {
                    
byte num5 this.key[2];
                    if (
num5 == num3)
                    {
                        
buffer[i] = j;
                        break;
                    }
                }
            }
            return 
buffer;
        } 
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback