web-dev-qa-db-ja.com

Java ME / J2MEで長さ50の)ランダムな16進文字列を生成する

私のアプリは、セッションIDとして使用する16進文字列を生成する必要があります。 JavaのSecureRandomが機能していないようです( "Java/lang/NoClassDefFoundError:Java/security/SecureRandom:Cannot create class in system package")

私はこのようなことをすることを考えました:

_byte[]  resBuf = new byte[50];
new Random().nextBytes(resBuf);
String  resStr = new String(Hex.encode(resBuf));
_

しかし、メソッドnextBytes(byte[] bytes)は、何らかの奇妙な理由で利用できません。

Java ME/J2MEでランダムな16進数を生成する手段はありますか?

どうもありがとう。

編集: Bouncy Castle lcrypto-j2me-145(ただしlcrypto-j2me-147ではない)を使用すると、上記のジェネレーターが機能するようです。

18
Bataleon

JavaMEはJavaSEのサブセットであるため、デスクトップバージョンの多くのクラスとメソッドは使用できません。

指定された長さのランダムな文字列を取得しようとしているようです。あなたはこのようなことをすることができます:

    private String getRandomHexString(int numchars){
        Random r = new Random();
        StringBuffer sb = new StringBuffer();
        while(sb.length() < numchars){
            sb.append(Integer.toHexString(r.nextInt()));
        }

        return sb.toString().substring(0, numchars);
    }
42
Mister Smith