better random numbers (RAND_bytes)
This commit is contained in:
+1
-1
@@ -125,7 +125,7 @@ win32 {
|
|||||||
}
|
}
|
||||||
!win32 {
|
!win32 {
|
||||||
DEPENDPATH += src/net/linux/
|
DEPENDPATH += src/net/linux/
|
||||||
LIBS += -lboost_thread
|
LIBS += -lboost_thread -l ssl
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG += qt release
|
CONFIG += qt release
|
||||||
|
|||||||
@@ -33,37 +33,58 @@ Tools::~Tools()
|
|||||||
|
|
||||||
void Tools::getRandNumber(int start, int end, int howMany, int* randArray, bool different) {
|
void Tools::getRandNumber(int start, int end, int howMany, int* randArray, bool different) {
|
||||||
|
|
||||||
double r = end-start+1;
|
int r = end-start+1;
|
||||||
|
unsigned char rand_buf[4];
|
||||||
|
unsigned int randNumber;
|
||||||
|
|
||||||
|
int i,j;
|
||||||
|
|
||||||
if (!different) {
|
if (!different) {
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i=0; i<howMany; i++) {
|
for (i=0; i<howMany; i++) {
|
||||||
|
|
||||||
randArray[i] = start+(int)(r*rand()/(RAND_MAX+1.0));
|
if(!RAND_bytes(rand_buf,4)) {
|
||||||
|
RAND_pseudo_bytes(rand_buf,4);
|
||||||
|
}
|
||||||
|
|
||||||
|
randNumber = 0;
|
||||||
|
for(j=0; j<4; j++) {
|
||||||
|
randNumber += (rand_buf[j] << 8*j);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(randNumber < ( (unsigned int) ( ((double)numeric_limits<unsigned int>::max()) / r ) ) * r) {
|
||||||
|
randArray[i] = start + (randNumber % r);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
|
||||||
int *tempArray = new int[end-start+1];
|
int *tempArray = new int[end-start+1];
|
||||||
int i;
|
|
||||||
for (i=0; i<(end-start+1); i++) tempArray[i]=1;
|
for (i=0; i<(end-start+1); i++) tempArray[i]=1;
|
||||||
|
|
||||||
int temp;
|
|
||||||
int counter(0);
|
int counter(0);
|
||||||
while (counter < howMany) {
|
while (counter < howMany) {
|
||||||
|
|
||||||
temp = (int)(r*rand()/(RAND_MAX+1.0));
|
if(!RAND_bytes(rand_buf,4)) {
|
||||||
if (tempArray[temp] == 1) {
|
RAND_pseudo_bytes(rand_buf,4);
|
||||||
|
}
|
||||||
|
|
||||||
randArray[counter] = temp+start;
|
randNumber = 0;
|
||||||
tempArray[temp] = 0;
|
for(j=0; j<4; j++) {
|
||||||
counter++;
|
randNumber += (rand_buf[j] << 8*j);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(randNumber < ( (unsigned int) ( ((double)numeric_limits<unsigned int>::max()) / r ) ) * r) {
|
||||||
|
randNumber = randNumber % r;
|
||||||
|
|
||||||
|
if (tempArray[randNumber] == 1) {
|
||||||
|
|
||||||
|
randArray[counter] = start + randNumber;
|
||||||
|
tempArray[randNumber] = 0;
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else { continue; }
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
#define TOOLS_H
|
#define TOOLS_H
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <limits>
|
||||||
|
#include <openssl/rand.h>
|
||||||
|
|
||||||
|
|
||||||
class Tools{
|
class Tools{
|
||||||
|
|||||||
Reference in New Issue
Block a user