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?
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
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?
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.
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.
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 ...
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
Sie suchen nach einem PRNG mit kryptographischer Stärke, wie sizeof(int) > 4
: Ссылка
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.
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.
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 ...