Crypto++

Alles rund um die Programmierung mit Qt
Antworten
Jonez
Beiträge: 22
Registriert: 7. Oktober 2005 01:01
Kontaktdaten:

Crypto++

Beitrag von Jonez »

Hi,

ich muss in meine anwendung eine AES (Rijndael) - Verschlüsslung einbauen um einen QString zu ver- und wieder entschlüsseln, bzw. ein QByteArray, da ich nur ein 8-Bit-Zeichensatz brauche.
Ich dachte, dass ich die crypto++-libraries verwende... hat das hier schonmal jemand gemacht und mir vielleicht ein kleines beispiel?

Ich find einfach keine gute doku zur crypto++ :-/

danke,
jonas
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

wie wär's mit dem Beispiel:

Code: Alles auswählen

# include <cryptlib.h>
# include <md5.h>
using namespace CryptoPP;

inline char MakeHexa ( unsigned char f_number )
{
   switch ( f_number )
   {
   case 0:
      return '0';
   case 1:
      return '1';
   case 2:
      return '2';
   case 3:
      return '3';
   case 4:
      return '4';
   case 5:
      return '5';
   case 6:
      return '6';
   case 7:
      return '7';
   case 8:
      return '8';
   case 9:
      return '9';
   case 10:
      return 'A';
   case 11:
      return 'B';
   case 12:
      return 'C';
   case 13:
      return 'D';
   case 14:
      return 'E';
   case 15:
      return 'F';
   default:
      return 'X';
   }
}

QByteArray MakeMd5 ( const QByteArray &f_data )
{
   unsigned char p_data [ MD5::DIGESTSIZE ];
   char a_result [ MD5::DIGESTSIZE * 2 + 1 ];

   a_result [ MD5::DIGESTSIZE * 2 ] = '\0';

   MD5 ( ).CalculateDigest ( p_data, ( const unsigned char * ) f_data.constData ( ), f_data.length ( ) );

   MakeHexa ( p_data, a_result, MD5::DIGESTSIZE );

   return a_result;
}
hilft dir das weiter?


Elgrimm Esleborn
Glaube an eine Lösung, nur dann kannst du auch eine finden.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

wieso benutzt du nicht openSSL?
Jonez
Beiträge: 22
Registriert: 7. Oktober 2005 01:01
Kontaktdaten:

Beitrag von Jonez »

Hi,

@Esleborn:
Danke, ich werd mal schauen wie weit ich das Beispiel für eine AES-Verschlüsslung verwenden kann.

@BartSimpson:
Kann openSSL denn auch AES (Rijndael) ver- und wieder entschlüsseln?
Mein Problem ist, dass ich auf bereits verschlüsselte Daten zugreifen muss und nicht einfach eine andere verschlüsslung verwenden darf.

Thanx,
Jonas
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Ja. Denn openSSL bessteht aus Mehren Teilen ein Modul für SSL/TLS und eins für reine Verschlüsselung/Signierung
es wird bei AES folgendes unterstützt:

Code: Alles auswählen

const EVP_CIPHER *EVP_aes_128_ecb(void);
const EVP_CIPHER *EVP_aes_128_cbc(void);
const EVP_CIPHER *EVP_aes_128_cfb1(void);
const EVP_CIPHER *EVP_aes_128_cfb8(void);
const EVP_CIPHER *EVP_aes_128_cfb128(void);
# define EVP_aes_128_cfb EVP_aes_128_cfb128
const EVP_CIPHER *EVP_aes_128_ofb(void);
#if 0
const EVP_CIPHER *EVP_aes_128_ctr(void);
#endif
const EVP_CIPHER *EVP_aes_192_ecb(void);
const EVP_CIPHER *EVP_aes_192_cbc(void);
const EVP_CIPHER *EVP_aes_192_cfb1(void);
const EVP_CIPHER *EVP_aes_192_cfb8(void);
const EVP_CIPHER *EVP_aes_192_cfb128(void);
# define EVP_aes_192_cfb EVP_aes_192_cfb128
const EVP_CIPHER *EVP_aes_192_ofb(void);
#if 0
const EVP_CIPHER *EVP_aes_192_ctr(void);
#endif
const EVP_CIPHER *EVP_aes_256_ecb(void);
const EVP_CIPHER *EVP_aes_256_cbc(void);
const EVP_CIPHER *EVP_aes_256_cfb1(void);
const EVP_CIPHER *EVP_aes_256_cfb8(void);
const EVP_CIPHER *EVP_aes_256_cfb128(void);
# define EVP_aes_256_cfb EVP_aes_256_cfb128
const EVP_CIPHER *EVP_aes_256_ofb(void);
Jonez
Beiträge: 22
Registriert: 7. Oktober 2005 01:01
Kontaktdaten:

Beitrag von Jonez »

ääh.. okay :)

Also was ich weiß ist, dass ich eine schlüssellänge von 32 Byte und einen Startvektor mit 16 Byte brauche...

was das ecb, cbc oder cfb bedeutet weiß ich jetzt nicht, aber ich werd mir das mit openSSL auf jedenfall auch mal nähen anschauen.
Oder hast Du zufälligerweise schon ein Beispiel dafür? :-)

Danke, Jonas

Der VB.NET - Code der Verschlüsslung ist der hier:

Code: Alles auswählen

Dim num() As Byte = {66, 25, 118, 201, 36, 75, 99, 120, 57, 9, 229, 186, 37, 74, 69, 152}
Dim strKey As String = "=!@4Fguip:}109NmkDW;>%}zxB>?4Rtd"

Public Function Encrypt(ByVal Text As String) As String
    Dim Data() As Byte
    Dim Output() As Byte
    Dim Key() As Byte

    Data = System.Text.Encoding.Default.GetBytes(Text)
    Key = System.Text.Encoding.Default.GetBytes(strKey)

    Dim Rijn As New Security.Cryptography.RijndaelManaged
    Dim trans As Security.Cryptography.ICryptoTransform = Rijn.CreateEncryptor(Key, num)

    Output = trans.TransformFinalBlock(Data, 0, Data.Length)

    Return ByteToHex(Output)
End Function
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Ich mag das ganze .net zeugs nicht.
Aber eventuell hilft dir der Link etwas zum Verständnis zur Kryptographie
http://www.cipherbox.de
Antworten