So generieren Sie große Zufallszahlen C

8

Ich suche nach einer Möglichkeit, große Zufallszahlen in der Größenordnung von 2 ^ 64 in C ... (100000000 - 999999999) zu generieren, um sie in einem Verschlüsselungsalgorithmus mit öffentlichem Schlüssel (wie p und q) zu verwenden.

Ich möchte keine Zahl kleiner als 2 ^ 64 erzeugen (also kleiner als 100000000).

Gibt es etwas, das mir dabei helfen könnte?

    
gfppaste 27.10.2011, 18:53
quelle

6 Antworten

12

random () gibt eine Länge zurück, die bei einem 64-Bit-System 64 Bit betragen sollte. Wenn Sie ein 32-Bit-System verwenden, können Sie Folgendes tun:

%Vor%

Alternativ könnten Sie auf einem NIX-System / dev / random in Ihren Puffer einlesen:

%Vor%

A

    
David M. Syzdek 27.10.2011, 19:07
quelle
9
___ qstntxt ___

Ich suche nach einer Möglichkeit, große Zufallszahlen in der Größenordnung von 2 ^ 64 in C ... (100000000 - 999999999) zu generieren, um sie in einem Verschlüsselungsalgorithmus mit öffentlichem Schlüssel (wie p und q) zu verwenden.

Ich möchte keine Zahl kleiner als 2 ^ 64 erzeugen (also kleiner als 100000000).

Gibt es etwas, das mir dabei helfen könnte?

    
___ qstnhdr ___ So generieren Sie große Zufallszahlen C ___ answer7920947 ___

Ich weiß, dass ich wahrscheinlich von OliCharlesworth kommen werde, aber benutze rand () mit einer Skala und einem Offset. Es ist in stdlib.h Um den gesamten Bereich abzudecken, sollten Sie das zu einem anderen kleineren rand () hinzufügen, um die Lücken im Mapping zu füllen.

    
___ answer7920902 ___

Sie können eine große Zahl rand aus kleineren Zahlen machen (z. B. int & amp; sizeof(int) >= 4 ). Zum Beispiel mit etwas wie << 0 , wobei ^ Potenzierung bedeutet und 0x00000000FFFFFFFF eine konstante ganze Zahl (z.B. 32) ist. Dann codieren Sie 0xFFFFFFFF00000000 (bitweises Links-Shift) für die Power-of-2-Operation.

Sie können also eine große zufällige Anzahl kleinerer Zufallszahlen erstellen.

    
___ answer31929574 ___

Oder Sie könnten zwei Zufallszahlengeneratoren mit INDEPENDENT-Seeds verwenden und ihre Ausgangsnummern wie vorgeschlagen zusammenfassen. Das hängt davon ab, ob Sie eine 64-Bit-Nummer eines RNG mit einer Periode im Bereich von 2 ^ 64 haben möchten. Verwenden Sie nicht den standardmäßigen Aufruf, der von der Zeit abhängt, da Sie für jeden Generator identische Seeds erhalten. Der richtige Weg, ich weiß es einfach nicht ...

    
___ tag123random ___ Dieses Tag ist für Fragen gedacht, die sich auf Zufallszahlen und deren Generatoren beziehen, sei es pseudozufällig oder wirklich zufällig. ___ tag123rsa ___ RSA ist ein allgemeiner Algorithmus für öffentliche Schlüssel, der für die Verschlüsselung und Signatur verwendet werden kann. Es ist eine Kernkomponente der meisten Sicherheitsprotokolle, die im Internet verwendet werden, einschließlich der SSL / TLS-Protokollsuite. Bei Fragen zu IBM Rational Software Architect verwenden Sie den Tag rational-rsa. ___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ answer7921017 ___

random () gibt eine Länge zurück, die bei einem 64-Bit-System 64 Bit betragen sollte. Wenn Sie ein 32-Bit-System verwenden, können Sie Folgendes tun:

%Vor%

Alternativ könnten Sie auf einem NIX-System / dev / random in Ihren Puffer einlesen:

%Vor%

A

    
___ answer7920900 ___

Sie suchen nach einem PRNG mit kryptographischer Stärke, wie sizeof(int) > 4 : Ссылка

    
___
Blagovest Buyukliev 27.10.2011 19:00
quelle
7

Sie suchen nach einem PRNG mit kryptographischer Stärke, wie openssl/rand : Ссылка

    
wkl 27.10.2011 18:57
quelle
3

Ich weiß, dass ich wahrscheinlich von OliCharlesworth kommen werde, aber benutze rand () mit einer Skala und einem Offset. Es ist in stdlib.h Um den gesamten Bereich abzudecken, sollten Sie das zu einem anderen kleineren rand () hinzufügen, um die Lücken im Mapping zu füllen.

    
MartyTPS 27.10.2011 19:01
quelle
3

Sie können eine große Zahl L aus kleineren Zahlen machen (z. B. A & amp; B ). Zum Beispiel mit etwas wie L = (2^ n)*A + B , wobei ^ Potenzierung bedeutet und n eine konstante ganze Zahl (z.B. 32) ist. Dann codieren Sie 1<<n (bitweises Links-Shift) für die Power-of-2-Operation.

Sie können also eine große zufällige Anzahl kleinerer Zufallszahlen erstellen.

    
Basile Starynkevitch 27.10.2011 18:57
quelle
-1

Oder Sie könnten zwei Zufallszahlengeneratoren mit INDEPENDENT-Seeds verwenden und ihre Ausgangsnummern wie vorgeschlagen zusammenfassen. Das hängt davon ab, ob Sie eine 64-Bit-Nummer eines RNG mit einer Periode im Bereich von 2 ^ 64 haben möchten. Verwenden Sie nicht den standardmäßigen Aufruf, der von der Zeit abhängt, da Sie für jeden Generator identische Seeds erhalten. Der richtige Weg, ich weiß es einfach nicht ...

    
jwoods486 10.08.2015 21:34
quelle

Tags und Links