Генерация случайной шестнадцатеричной строки (длиной 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);
}