Problem beim Ausführen eines Chats mit AES



  • Also ich habe eine Rijndael-Klasse ausm Netz gesaugt und sie für meinen Chat benutzt. Aufm ersten Blick schien die Implementation leicht und sauber verlaufen zu sein, soch in der Praxis kam wie so oft die Ernüchterung. Und zwar wird der Text leider nicht immer entschlüsselt, sodass er teilw. verschlüsselt beim Partner ankommt.

    Hier habe ich die Klasse her:

    http://www.codeproject.com/KB/security/aes.aspx



  • Ja.



  • Ja, ich habe es genauso gemacht, dennoch sind die oben genannten Probleme aufgetaucht.

    CRijndael oRijndael;
      oRijndael.MakeKey("1234567890123456", CRijndael::sm_chain0, 16, 16);
      char szDataIn1[49] = "ababababccccccccababababccccccccababababcccccccc";
      char szDataIn[49];
      char szDataOut[49];
      memset(szDataIn, 0, 49);
      memset(szDataOut, 0, 49);
    
      //Test ECB
    
      strcpy(szDataIn, szDataIn1);
      memset(szDataOut, 0, 49);
      oRijndael.Encrypt(szDataIn, szDataOut, 48, CRijndael::ECB);
      memset(szDataIn, 0, 49);
      oRijndael.Decrypt(szDataOut, szDataIn, 48, CRijndael::ECB);
    

    Dieser Block macht Probleme. szDataIn ist in meinem Fall der eingegebene Text. Natürlich ist er nicht immer 48 Zeichen lang. Könnte hier schon das erste Problem stecken?



  • Du weißt aber schon, dass Rijndael auf Binärdaten operiert, ja? Wenn Du Text reingibst, kommt "binärer Kuddelmuddel" raus, den man nicht "als Text" verschicken darf.



  • Ja, das mit den Längen könnte auch ein Problem sein. Scheint nicht so, als wäre Encrypt/Decrypt gut genug dokumentiert, was die Längen angeht.



  • krümelkacker schrieb:

    Du weißt aber schon, dass Rijndael auf Binärdaten operiert, ja? Wenn Du Text reingibst, kommt "binärer Kuddelmuddel" raus, den man nicht "als Text" verschicken darf.

    Soll das heißen ich muss die Strings vorher in Hex-Strings konvertieren wie hier?:

    try
    {
      char szHex[33];
    
      //Initialization
    
      CRijndael oRijndael;
      oRijndael.MakeKey("abcdefghabcdefgh", CRijndael::sm_chain0, 16, 16);
    
      char szDataIn[] = "aaaaaaaabbbbbbbb";
      char szDataOut[17] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
    
      //Encryption
    
      oRijndael.EncryptBlock(szDataIn, szDataOut);
    
      CharStr2HexStr((unsigned char*)szDataIn, szHex, 16);
      cout << szHex << endl;
      CharStr2HexStr((unsigned char*)szDataOut, szHex, 16);
      cout << szHex << endl;
      memset(szDataIn, 0, 16);
    
      //Decryption
    
      oRijndael.DecryptBlock(szDataOut, szDataIn);
    
      CharStr2HexStr((unsigned char*)szDataIn, szHex, 16);
      cout << szHex << endl;
    }
    catch(exception& roException)
    {
      cout << roException.what() << endl;
    }
    

Anmelden zum Antworten