乱数生成システムを実装しようとしています。 (私は何とかやるに必要なものJava BigIntegerを固定長のより小さい数に減らす
811203900027758629330492243480887228261034167773619203962320290854945165232584286910163772258660
:
String start = "abc";
String hash = utils.SHA1(start); //Generates an SHA1 hash of the string
byte[] bytes = hash.getBytes();
BigInteger big = new BigInteger(bytes);
このコードは、の値とのBigIntegerを生成します。基本的に私は、その後のBigInteger値に変換されるSHA1ハッシュ、で読んでいますこれは私が混乱するところです)、その数を固定小数点数ではるかに短い数に減らしています。
モジュラ算術とJava Math API関数を組み合わせて使用すると、この数値を3桁の数値に減らすことができます。または私が選んだ他の長さの番号。
現時点では、私は巨大数をStringに変換してから、必要な長さの部分文字列を取ります。しかし、私はこの数字が3桁の数字に限られているので、私はその数字がランダムではないので、これで全然満足しているわけではありません。
これは、新しく生成されたランダムx桁数を基数36を使用して文字列に変換し、ASCIIアルファベット文字を含むことを目的としています。
何か情報やアドバイスをいただければ幸いです。
ありがとうございます!
3桁が必要ですが、制限されているため3桁は必要ありません。私は理解していません... – m0skit0
状況に応じてx桁が必要です... – DaveFar
その整数は、ハッシュ値のASCII 16進表現、 'a9993e364706816aba3e25717850c26c9cd0d89d'であり、必要な値の2倍です。上記のグーグルでは、それが...のハッシュであることが明らかになります。 –