Seite 1 von 1

Crypto++

Verfasst: 6. Februar 2006 02:23
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

Verfasst: 6. Februar 2006 03:28
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

Verfasst: 6. Februar 2006 10:46
von BartSimpson
wieso benutzt du nicht openSSL?

Verfasst: 6. Februar 2006 13:42
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

Verfasst: 6. Februar 2006 13:55
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);

Verfasst: 6. Februar 2006 16:20
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

Verfasst: 6. Februar 2006 16:24
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