Генерация случайной шестнадцатеричной строки (длиной 50) в Java ME/J2ME

Моему приложению нужно создать шестнадцатеричную строку для использования в качестве идентификатора сеанса. Java SecureRandom, похоже, не работает ( "java/lang/NoClassDefFoundError: java/security/SecureRandom: невозможно создать класс в системном пакете" )

Я думал сделать что-то вроде этого:

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

Но метод nextBytes(byte[] bytes) недоступен по какой-то странной причине.

Есть ли у кого-нибудь способ генерации случайного шестнадцатеричного числа в Java ME/J2ME?

Большое спасибо.

Изменить:. Этот генератор, похоже, работает при использовании Bouncy Castle lcrypto-j2me-145 (но не lcrypto-j2me-147).

Ответ 1

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);
    }

Ответ 2

Это генерирует случайное целое число length * 4 бита и выводит его шестнадцатеричное представление:

String randomHexString(int length, Random random) {
    if (length == 0) return "";
    return new BigInteger(length * 4, random).toString(16);
}