Java me 在JavaME/J2ME中生成随机十六进制字符串(长度为50)
我的应用程序需要生成一个十六进制字符串用作会话ID。Java的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
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
。