Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Große Zahlen in C

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.01.2009, 18:06 Uhr
~Dirk_Gast
Gast


Hallo,

ich möchte mit sehr großen Zahlen (1024Bit und mehr) rechnen. Dafür suche ich jetzt Sourcecode, welchen ich verwenden kann.

Leider habe ich beim googlen noch nichts passendes gefunden. Evtl. habt ihr mir einen Tipp, was ich in C verwenden könnte. Ich bräuchte alle Operationen, die auf kleinen Zahlen auch funktionieren: +, -, *, /, mod, ...

Vielen Dank und viele Grüße
Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.01.2009, 19:39 Uhr
0xdeadbeef
Gott
(Operator)


http://gmplib.org/
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.01.2009, 14:57 Uhr
~Dirk_Gast
Gast


Hallo,

danke. Die gmplib werde ich auch noch probieren.

Habe mich vorerst mal für openssl entschieden, da dort auch alle Krypto-Algorithmen gleichzeitig mit drin sind und ich somit alles aus einem Guss habe.

Leider verstehe ich die big number Struktur nicht so wirklich.

Nehmen wir an, dass ich eine große Zahl hexadezimal vorliegen habe:

0X40DBDE8944559DB16DD17A3F06B5F237317B097E

Wie kann ich diese Zahl in die folgende Struktur, die mir openssl anbietet, stecken?
Muss man dabei irgendwie noch big und little endian beachten?


Code:
#define BN_ULONG    unsigned long
#define BN_BITS2    64

struct bignum_st
{
    BN_ULONG *d;    /* Pointer to an array of 'BN_BITS2' bit chunks. */
    int top;    /* Index of last used d + 1. */
    /* The next are internal book keeping for bn_expand. */
    int dmax;    /* Size of the d array. */
    int neg;    /* one if the number is negative */
    int flags;
};



Ich schreibe hier mal meine Vermutungen:
d ist ein Array, welches aus unsigned long value besteht. Dort stecke ich Stück für Stück die große Zahl rein. Mir ist nur nicht klar, wie ich diese aufteilen muss.

Top ist das letzte verwendete Element im Array.
dmax die Größe des Arrays.
neg kann wahrscheinlich alle Werte annehmen. Wenn es 1 ist, dann handelt es sich um eine negative Riesenzahl.

Was flags bedeuten könnte weiß ich leider überhaupt nicht.

Vielen Dank schon einmal für eure Hilfe.
Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.01.2009, 15:11 Uhr
~Dirk_Gast
Gast


Die Flags habe ich inzwischen gefunden. Diese sollte nicht das Problem sein.


Code:
#define BN_FLG_MALLOCED        0x01
#define BN_FLG_STATIC_DATA    0x02
#define BN_FLG_CONSTTIME                 0x04



Gruß
Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.01.2009, 17:20 Uhr
~Dirk_Gast
Gast


Hallo,

inzwischen habe ich es gelöst. Es gibt noch weitere Funktionen in der openssl, mit der ich diese Umwandlung vornehmen kann. Für meinen Fall hat BN_hex2bn geholfen.

Grüße
Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: