Java me 在JavaME/J2ME中生成随机十六进制字符串(长度为50)

Java me 在JavaME/J2ME中生成随机十六进制字符串(长度为50),java-me,Java Me,我的应用程序需要生成一个十六进制字符串用作会话ID。Java的SecureRandom似乎不起作用(“Java/lang/NoClassDefFoundError:Java/security/SecureRandom:无法在系统包中创建类”) 我想做这样的事情: byte[] resBuf = new byte[50]; new Random().nextBytes(resBuf); String resStr = new String(Hex.encode(resBuf)); p

我的应用程序需要生成一个十六进制字符串用作会话ID。Java的
SecureRandom
似乎不起作用(“Java/lang/NoClassDefFoundError:Java/security/SecureRandom:无法在系统包中创建类”)

我想做这样的事情:

byte[]  resBuf = new byte[50];
new Random().nextBytes(resBuf);
String  resStr = new String(Hex.encode(resBuf));
    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);
    }
但是由于某种奇怪的原因,
nextBytes(byte[]bytes)
方法不可用

在JavaME/J2ME中,有人有办法生成随机十六进制数吗

非常感谢


编辑:当使用Bouncy Castle lcrypto-j2me-145(但不是lcrypto-j2me-147)时,上述生成器似乎可以工作。

JavaME是JavaSE的一个子集,因此桌面版本中的许多类和方法都不可用

看起来您正在尝试获取给定长度的随机字符串。您可以这样做:

byte[]  resBuf = new byte[50];
new Random().nextBytes(resBuf);
String  resStr = new String(Hex.encode(resBuf));
    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);
    }
私有字符串getRandomHexString(int numchars){
随机r=新随机();
StringBuffer sb=新的StringBuffer();
while(sb.length()
由于
Integer.tohextstring
去掉前导零,十六进制的第一个字符永远不会为零,除非
Random.nextInt()
返回0的罕见情况。可以使用
String.format(“%08x”,r.nextInt())
,而不是
Integer.toHexString