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

Bat*_*eon 18 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));
Run Code Online (Sandbox Code Playgroud)

但由于nextBytes(byte[] bytes)某种奇怪的原因,该方法无法使用.

有没有人有可能在Java ME/J2ME中生成随机十六进制数?

非常感谢.

编辑:上面的生成器似乎在使用Bouncy Castle lcrypto-j2me-145(但不是lcrypto-j2me-147)时有效.

Mis*_*ith 44

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);
    }
Run Code Online (Sandbox Code Playgroud)

  • 由于“Integer.toHexString”去除了前导零,因此十六进制的第一个字符永远不会为零,除了“Random.nextInt()”返回 0 的罕见情况之外。可以使用“String”代替“Integer.toHexString”。格式(“%08x”,r.nextInt())`。 (4认同)