我正在做一个秘密共享算法,它加密一个消息。要做到这一点,我需要一个比消息大的素数和一些与消息大小大致相同的随机数。
我可以用BigInteger.probablePrime(MsgSize+8)做第一件事,但我不知道如何做后一件事。
我使用的是随机数和后来的SecureRandom,但它们不会生成给定长度的数字。我的解决方案是对BigInteger执行randomInt ^ randomInt,但这显然是一个糟糕的解决方案。
一些想法?
发布于 2012-06-22 03:11:23
您是否尝试过使用较小的probablePrime方法,然后使用较大的随机整数作为该数字的偏移量?这可能会起作用,这只是一个想法。
发布于 2012-07-16 05:21:27
我也有同样的问题(这就是我找到这篇文章的原因)。现在有点晚了,但也许其他人发现这个方法很有用:
public static BigDecimal getBigRandom(int d)
{
BigDecimal rnd = new BigDecimal(Math.random());
BigDecimal rndtmp;
for(int i=0;i<=d;i++)
{
rndtmp = new BigDecimal(Math.random());
rndtmp = rndtmp.movePointLeft(rnd.precision());
rnd = rnd.add(rndtmp);
}
return rnd;
}用法: BigDecimal x= getBigRandom(y);
每个y都会给你大约50个数字。
如果需要的位数超过(2^31-1)*50位,只需将int改为long ;-)
不知道它是不是很好,但对我来说很有效
https://stackoverflow.com/questions/11145034
复制相似问题