2012-02-25 26 views
3

具体的には、暗号化された安全な乱数を、0からいくつかの番号xまで生成したいだけです。OpenSSLのbn_rand_rangeに相当するJavaはありますか?

OpenSSLでは、これは機能bn_rangeで行われます。

自分(2 ビット 0から番号を生成する)JavaのBigInteger(int bits, Random r)コンストラクタを使用して実装することができます。しかし、可能であれば、セキュリティのために、より良いテストアルゴリズムを使用したいと思います。

Javaでこれを行う標準的な方法はありますか?

P.S.私は実際にAndroidを使用していますが、私は標準のJavaでそれを行う方法を知らない。

編集:xは、BigIntegerとして格納された大きな整数です。

答えて

1

私の知る限り、この機能ではありません提供されます。しかし、あなた自身を実装するのは簡単です。

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

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

JavaはRandomクラスのサブクラスであるSecureRandomを提供します。この説明には次のものが含まれます。

このクラスは、強力な乱数ジェネレータ(RNG)を提供します。多くの実装は、真のランダムシードから擬似ランダムシーケンスを生成するために決定論的アルゴリズムを使用する擬似乱数ジェネレータ(PRNG)の形式です。他の実装では、真の乱数を生成することができる、まだ他は

Javaは単に1つのインプリメンテーションを提供し、両方の技術、SHA1PRNG関数の組み合わせを使用することができ、それ擬似乱数生成(PRNG)アルゴリズムなどdetails

この実装は、IEEE P1363標準、付録G.7「ソースビットの拡張」に準拠し、SHA-1をPRNGの基礎として使用します。これは、64ビットカウンタと連結された真のランダムシード値に対するSHA-1ハッシュを計算します。このカウンタは、各操作ごとに1ずつ増加します。 160ビットのSHA-1出力からは、64ビットのみが使用されます。

また、OpenSSLのからbn_rand_range機能は、私は、機能を実装し、アルゴリズムものに用などの詳細を見つけることができなかったものの、擬似乱数生成(PRNG)アルゴリズムを使用することもconsideredであることに留意すべきです。

SecureRandomRandomクラスのサブクラスであるので、SecureRandomオブジェクトは.nextInt(int n)方法を含むRandomのすべてのメソッドを使用することができます。 nextInt方法が提供:

を(含む)0との間の擬似乱数、一様に分布int値を返し、この乱数ジェネレータのシーケンスから引き出された規定値(排他的)。

そのため、0100(の範囲内の暗号強い擬似乱数を生成するには]あなたは次のようなコードを使用することができます。

import java.security.SecureRandom; 
class secure{ 
    public static void main(String[] args) throws Exception{ 
     SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); 
     System.out.println(random.nextInt(100)); 
    } 
} 
+0

javaのbn_rand_rangeの実装ではすでにSecureRandomを使用しています。問題は、bn_rand_rangeではなくbn_rand_rangeのように動作する関数の実装があることです。 – diedthreetimes

+0

bn_rand_rangeを模倣するコードを表示するための回答を更新しました。あなたは0とXの間の数字を見つけることに言及したので、私はnextIntを使用しました。 XとYの間の範囲が必要な場合は、 'random.nextInt(Y-X)+ X'を使用します。 – amccormack

+0

申し訳ありませんが、XはintではなくBigIntegerです。さもなければあなたのアプローチはまさに私が探しているものになります。 – diedthreetimes

関連する問題