我需要从Javascript访问SecureRandom Java Object。我的最终目标是从PRNG获取4个字节并将其转换为Javascript整数变量。根据{{3}},以下两行Java代码应该抓住4个随机字节:
byte bytes[] = new byte[4];
random.nextBytes(bytes);
我的问题是我不知道该怎么做 1)分配适合传递给Java方法的字节数组 2)之后将该数组解析为整数
到目前为止,我已经设法使用getSeed()方法返回一个随机字节数组。当我在Firefox中呈现下面提供的HTML代码时,它显示“[B @ 16f70a4”,它似乎是一个指针或其他东西。
<script>
var sprng = new java.security.SecureRandom();
random = sprng.getSeed(4);
document.write(random + "<br/>\n");
</script>
这让我觉得我成功实例化并访问了Java类,但是在类型转换方面存在问题。
任何人都可以帮我写 allocateJavaByteArray(N)和 convertJavaByteArrayToInt(N)让以下代码工作:
var sprng = new java.security.SecureRandom();
var nextBytes = allocateJavaByteArray(4);
srng.nextBytes(nextBytes);
var nextInt = convertJavaByteArrayToInt(4);
提前谢谢。
答案 0 :(得分:2)
您可以像这样实施 convertJavaByteArrayToInt :
function convertJavaByteArrayToInt(bytes) {
var r = 0;
for (var i = 0; i < bytes.length; i++) {
r += (bytes[i] & 0xff) << (8 * i);
}
return r;
}
allocateJavaByteArray 很难实现,因为我们无法获得字节的类。因此,无法使用 java.lang.reflect.Array.newInstance 来创建 byte [] 实例。但这是一个棘手的实现:
function allocateJavaByteArray(n) {
var r = "";
for (var i = 0; i < n; i++) {
r += "0";
}
return new java.lang.String(r).getBytes();
}
已更新:上面的代码似乎无法在FireFox 3.6中使用。这是另一个 allocateJavaByteArray 实现,请尝试:
function allocateJavaByteArray(n) {
var r = new java.io.ByteArrayOutputStream(4);
for (var i = 0; i < n; i++) {
r.write(0);
}
return r.toByteArray();
}
答案 1 :(得分:0)
通常你会在服务器上生成随机数并将其传递给jsp中的请求。
答案 2 :(得分:0)
您可以在第一时间生成一个随机整数,如下所示:
var nextInt = sprng.nextInt();
答案 3 :(得分:0)
Java字符串是唯一能够毫不费力地传递Java-&gt; JS或JS-&gt; Java的东西。
byte []或任何arry将在JS中看作JSObject。
var sprng = new java.security.SecureRandom();
是
var foo= new java.package.SomeClass();
在Netscape / Mozilla / FF
中有效它需要访问类,所以任何java标准类或者你需要加载一个jar然后访问该类。
原始问题:
创建applet whith实用方法:
public String someStringEncodedValue(){ 返回1+“|”+2; }
将applet包含在具有唯一ID
JS使用唯一ID
通话方法
解析字符串(由|分割)