Ich schreibe gerade einen Zufallszahlengenerator, der einen Pseudozufall int erzeugt und dann einen int zurückgibt, der das niedrigstwertige Bit im int Wert darstellt.Konstruiere ein Byte aus einzelnen Bits in Java
public class RNG {
//algorithm input: first input is the seed
private int x;
//primes for calculating next random number
private int p;
private int q;
//constructor
public RNG()
{
p = getPrime();
q = getPrime();
//make sure p and q are not equal
while(p == q)
{
q = getPrime();
}
//seed must not be divisible by p or q
//easiest way is to make the seed another prime number
//this prime does not need to be congruent to 3 mod 4, so
//getPrime() is not used.
x = (BigInteger.probablePrime(8, new Random())).intValue();
}
//return a pseudorandom prime number using java.util.Random such that
//the number is congruent to 3 mod 4
private int getPrime()
{
Random rand = new Random();
int i;
while(true)
{
//generates a random BigInteger. The probability
//this BigInteger is composite is less than 2^-100
//bitLength is 8 so maximum prime value is 251
i = (BigInteger.probablePrime(8, rand)).intValue();
if((i % 4) == (3 % 4))
{
break;
}
}
return i;
}
public int next()
{
//calculate next algorithm input
int next = (x * x) % (p * q);
//set algorithm input for next next() call
x = next;
//return least significant bit
return next & 1;
}
}
Das Ziel des Programms ist es, einen Rückgabewert zu schaffen, dass eine Test-Klasse in eine Datei dann schreiben kann, und weil der Ausgang das am wenigsten signifikante Bit der zufällig erzeugte Zahl ist, wird der Ausgang sein kryptographisch sicher.
Wenn ich jedoch versuche, die Implementierung der Testklasse durchzuführen, habe ich Probleme, herauszufinden, was ich mit der Ausgabe machen soll. Ich brauche die Testklasse, um 512 Bits in eine Ausgabedatei schreiben zu können. Die FileOuputStream-Klasse kann jedoch nur Bytes in die Ausgabedatei schreiben.
Was ich versuche herauszufinden ist, ob es eine Möglichkeit gibt, die einzelnen 1 oder 0 Ausgänge von meinem Zufallsgenerator in Byte-Werte zu gruppieren, aber bisher habe ich nichts gefunden, was in Java unterstützt wird.
Wissen Sie über [ 'java.util.BitSet' ] (http://docs.oracle.com/javase/8/docs/api/java/util/BitSet.html)? – Radiodef
@Norsk Übrigens ... die Antwort dort erstellt eine physische Datei. Die andere Antwort besagt, dass Sie keine virtuelle Datei erstellen können. – Radiodef