从 java 中的各个位构造一个字节
Construct a byte from individual bits in java
我目前正在编写一个随机数生成器,它生成一个伪随机 int,然后 returns 一个代表 int 值中最低有效位的 int。
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;
}
}
该程序的目的是能够创建一个 return 值,然后测试 class 可以将其写入文件,并且因为输出是随机的最低有效位生成的数字输出将是加密安全的。
但是,在尝试实施测试 class 时,我无法弄清楚如何处理输出。我需要测试 class 能够做的是将 512 位写入输出文件。然而,FileOuputStream class 只能将字节写入输出文件。
我想做的是弄清楚是否有办法将我的随机数生成器的单个 1 或 0 输出分组为字节值,但到目前为止我还没有找到 Java.
您可以使用 <<
运算符(或位移和赋值运算符 <<=
)的位移来构造字节(或整数或长整数)
byte b = 0;
for (int i = 0; i < 8; i++) {
b <<= 1;
b |= rng.next();
}
我目前正在编写一个随机数生成器,它生成一个伪随机 int,然后 returns 一个代表 int 值中最低有效位的 int。
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;
}
}
该程序的目的是能够创建一个 return 值,然后测试 class 可以将其写入文件,并且因为输出是随机的最低有效位生成的数字输出将是加密安全的。
但是,在尝试实施测试 class 时,我无法弄清楚如何处理输出。我需要测试 class 能够做的是将 512 位写入输出文件。然而,FileOuputStream class 只能将字节写入输出文件。
我想做的是弄清楚是否有办法将我的随机数生成器的单个 1 或 0 输出分组为字节值,但到目前为止我还没有找到 Java.
您可以使用 <<
运算符(或位移和赋值运算符 <<=
)的位移来构造字节(或整数或长整数)
byte b = 0;
for (int i = 0; i < 8; i++) {
b <<= 1;
b |= rng.next();
}