1

我正在尝试生成一个 32 字节大小的随机盐。但是我的 JS 引擎 Rhino 1.7.13 不支持 SecureRandom 类。

下面是相同的代码片段。

function getSalt() {
    var random = new SecureRandom();
    var salt1 = new Array(32);
    random.nextBytes(salt1);
    return salt1;
}

错误记录如下。

java.util.concurrent.ExecutionException:javax.script.ScriptException:ReferenceError:未定义“SecureRandom”。

此外,rhino js 引擎不允许任何外部库的导入或加载。有没有办法可以在 Rhino 中生成安全的随机盐?

4

1 回答 1

1

使用SecureRandom完全限定名称java.security.SecureRandom。并且字节数组必须是 Java 字节数组,否则会报错:

无法将 org.mozilla.javascript.NativeArray@6b419da 转换为 byte[]

我从 Tomasz Gawel 那里找到了这个答案,它展示了如何在 Rhino 中创建 Java 字节数组。

通过上述修改,完整的脚本为:

function getSalt() {
    var random = new java.security.SecureRandom();
    var salt1 = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 32)
    random.nextBytes(salt1);
    return salt1;
}

saltB64 = java.lang.String(java.util.Base64.getEncoder().encode(getSalt()))
print(saltB64)
于 2022-02-03T10:45:28.470 回答