Avatar billede viht Nybegynder
23. november 2002 - 01:51 Der er 12 kommentarer og
1 løsning

Hjælp til lidt kryptering.

100 point til den der skriver en metode der krypterer en string vha. følgende AES implementation. Den tager UINT8 som inputparameter til krypteringsmetoden og jeg har ingen anelse om hvordan jeg får en string krejlet om til det.

http://www.mirrors.wiretapped.net/security/cryptography/algorithms/aes/aes-c++-sstefanek/

Jeg vil se et virkende kodeeksempel uden MFC.

Altså string ind(klar tekst) --> !!krypter!! --> string ud (krypteret) string ind (krypteret) !!dekrypter!! --> string ud(klar tekst)
Avatar billede viht Nybegynder
24. november 2002 - 14:08 #1
Kom så ud af fjerene!
Avatar billede jpk Nybegynder
25. november 2002 - 09:46 #2
#include "rijndael.h"
#include <string.h>
#include <iostream.h>
#include <conio.h>

int main(int argc, char* argv[])
{
    unsigned char key[32] = {'A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D'};
    const unsigned char* plainText = (char unsigned*)"Hello world";
    cout << plainText << endl;
    int plainTextLen = strlen((char*)plainText); // Plain text length
    int neededLength = plainTextLen + 16 - (plainTextLen % 16);

    // Encrypting
    Rijndael rin;
    unsigned char* output = new unsigned char[neededLength];

    rin.init(Rijndael::CBC,Rijndael::Encrypt, key, Rijndael::Key32Bytes);
    // It is a good idea to check the error code
    int len = rin.padEncrypt(plainText, plainTextLen, output);
    if(len >= 0)
        cout << output << endl;
    else
        cout << "error" << endl;

    // Decrypting: we can reuse the same object
    unsigned char* output2 = new unsigned char[plainTextLen+1];
    output2[plainTextLen] = 0;
    rin.init(Rijndael::CBC,Rijndael::Decrypt, key, Rijndael::Key32Bytes);
    len = rin.padDecrypt(output,len,output2);
    if(len >= 0)
        cout << output2 << endl;
    else
        cout << "error" << endl;

    _getch();
    return 0;
}
Avatar billede soepro Nybegynder
25. november 2002 - 10:11 #3
#include <stdio.h>
#include <conio.h>
#inclyde "rijndael.h"

#define  TRUE 1
#define  FALSE 0

Rinjdael AES;

int krypter(char *klarTekst, char* krypteretTekst, char key[32])
{
  int inpLen = strlen(klarTekst);
  AES.init(CBC, Encrypt, key, Key32Bytes);
  if (EAS.padEncrypt(klarTekst, inpLen, krypteretTekst) != inpLen)
  { // Krypteringsfejl
    return FALSE;
  };
  return TRUE;
} // krypter

int dekrypter(char* krypteretTekst, char *klarTekst, char key[32])
{
  int inpLen = strlen(krypteretTekst);
  AES.init(CBC, Decrypt, key, Key32Bytes);
  if (EAS.padDecrypt(krypteretTekst, inpLen, klarTekst) != inpLen)
  { // Dekrypteringsfejl
    return FALSE;
  };
  return TRUE;
} // dekrypter

int main(void)
{
  char klarTekst[127]      = "Hello world";
  char krypteretTekst[127] = "";
  char key[33]            = "EKSPERTENEKSPERTENEKSPERTERNEKSP";

  // Så krypterer vi
  printf("I klar tekst: %s\n", klarTekst);
  krypter(klarTekst, key, krypteretTekst);
  printf("Krypteret  : %s\n", krypteretTekst);

  // Og tilbage igen.
  printf("Krypteret  : %s\n", krypteretTekst);
  dekrypter(krypteretTekst, key, klarTekst);
  printf("I klar tekst: %s\n", klarTekst);

  getch();
  return 0;
}
Avatar billede soepro Nybegynder
25. november 2002 - 10:38 #4
voht >> Glemt lige ovenstående svar et øjeblik, det virker ikke ! Det er noget med at AES encrypt/decrypt kræver strenge der er helt multiplum af 16 bytes (1 paragraf), men hvordan skal jeg lige have fundet ud af.
Avatar billede viht Nybegynder
25. november 2002 - 11:17 #5
Begge besvarelser virker perfekt, så in all fairness vælger jeg jpks svar. Jeg tvivler på at soepros svar har siddet fast i en router i en hel time, så vi kan vidst godt afskrive protokolfejl som værende skyld i det senere svar :)
Avatar billede viht Nybegynder
25. november 2002 - 11:20 #6
Dit svar er temmelig nemt at tilpasse jpks, så det er ikke noget du behøver bruge tid på. Tak for hjælpen.
Avatar billede jpk Nybegynder
25. november 2002 - 11:23 #7
Velbekomme og selv tak...
Avatar billede soepro Nybegynder
25. november 2002 - 12:15 #8
viht >> Fint nok - men hvis jeg tager mit eks. og compilerer under BCB 4.0 så får jeg ikke en tøddel ud ?

Jeg har bare lavet de to funktioner du bad om - der var ingen svar da jeg gik igang. (jpk's eksempel er magen til det der står i header filen, så det troede jeg du havde prøvet !)
Avatar billede viht Nybegynder
25. november 2002 - 12:42 #9
Well, ikke helt det samme. Jeg kunne ikke finde ud af at få lavet noget tekst om til den lidt specielle inputparameter til decrypt/encrypt metoderne. Det var det var hans kode der fik mig videre på det punkt.
Avatar billede viht Nybegynder
25. november 2002 - 12:56 #10
Argh, jeg mener: Det var på det punkt hans kode fik mig videre i teksten :)
Avatar billede viht Nybegynder
08. september 2003 - 22:58 #11
Test
        private void comments_UpdateCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e) {
            ForumThreadMessage message = (ForumThreadMessage)ForumThreadMessage.Find(comments.DataKeys[e.Item.ItemIndex].ToString(),
                "ForumThreadMessage", typeof(ForumThreadMessage));
            message.ForumThreadMessageContent = ((TextBox)e.Item.FindControl("ForumThreadMessageContent")).Text;
            message.Persist(true, true);

            comments.EditItemIndex = -1;
            PopulateList();
        }
Avatar billede soepro Nybegynder
09. september 2003 - 08:13 #12
viht >> Nåh - det kunne du bare have sagt !?!?
Avatar billede viht Nybegynder
09. september 2003 - 08:20 #13
Sorry for forstyrrelsen :)
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