有没有java的相当于OpenSSL的bn_rand_range一个? [英] Is there a java equivalent to OpenSSL's bn_rand_range?

查看:683
本文介绍了有没有java的相当于OpenSSL的bn_rand_range一个?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

具体来说,我只是想生成介于0和一些数x加密安全随机数。

Specifically, I just want to generate a cryptographically secure random number between 0 and some number x.

在此的OpenSSL使用该功能bn_range完成的。

In OpenSSL this is done with the function bn_range.

我可以使用Java的`BigInteger的实现它自己(INT位,随机R)构造函数(生成从0到2 ^位数字)。但我想,如果可能的话,使用更好的测试算法的安全着想。

I can implement it myself using Java's `BigInteger(int bits, Random r) constructor (which generates a number from 0 to 2^bits). But I would like, if possible, to use a better tested algorithm for the sake of security.

有没有在Java中做到这一点的标准方式?

Is there a standard way to do this in Java?

P.S。其实我使用的是Android,但我不知道该怎么做,在标准的Java。

P.S. I am actually using Android, but I don't know how to do it in standard java.

编辑:X是存储为一个BigInteger一个大的整数。

X is a large integer stored as a BigInteger.

推荐答案

据我所知,没有提供该功能。但它是很容易的实现自己。

As far as I can tell, this functionality is not provided. But it is easy enough to implement yourself.

Random r = new SecureRandom();    
BigInteger q = something_big;
BigInteger ans;

do
    BigInteger(bits_in_q, r);
while (ans >= q); // bn_rand_range generates numbers < q

这篇关于有没有java的相当于OpenSSL的bn_rand_range一个?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆