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

Posted

技术标签:

【中文标题】在 Java ME/J2ME 中生成随机十六进制字符串(长度为 50)【英文标题】:Generating a random hex string (of length 50) in Java ME/J2ME 【发布时间】:2013-01-31 09:41:42 【问题描述】:

我的应用需要生成一个十六进制字符串以用作会话 ID。 Java 的 SecureRandom 似乎不起作用(“java/lang/NoClassDefFoundError: java/security/SecureRandom: Cannot create class in system package”)

我想过做这样的事情:

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

【讨论】:

由于Integer.toHexString去除了前导零,十六进制的第一个字符永远不会是零,除了Random.nextInt()返回0的罕见情况。可以使用String.format("%08x", r.nextInt())代替Integer.toHexString .

以上是关于在 Java ME/J2ME 中生成随机十六进制字符串(长度为 50)的主要内容,如果未能解决你的问题,请参考以下文章

在Java中生成随机单词?

如何在 Java 中生成随机排列?

在Java中生成一个随机字符串[关闭]

在 Java 8 中生成随机短数组

如何在java中生成一个随机的15位长[重复]

如何在Java中生成随机字符串[重复]