24

我的应用程序需要生成一个十六进制字符串以用作会话 ID。JavaSecureRandom似乎不起作用(“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)时,上述生成器似乎可以工作。

4

1 回答 1

54

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);
    }
于 2013-01-31T10:12:58.027 回答