【问题标题】:How can we generate Random Salt of 32 bytes in Rhino JS我们如何在 Rhino JS 中生成 32 字节的随机盐
【发布时间】:2022-02-03 09:42:42
【问题描述】:
我正在尝试生成 32 字节大小的随机盐。但是我的 JS 引擎 Rhino 1.7.13 不支持 SecureRandom 类。
下面是相同的代码sn-p。
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 中生成安全的随机盐?
【问题讨论】:
标签:
javascript
random
salt
rhino
secure-random
【解决方案1】:
对于SecureRandom,使用完全限定名称java.security.SecureRandom。
而且字节数组必须是Java字节数组,否则会报错:
无法将 org.mozilla.javascript.NativeArray@6b419da 转换为 byte[]
我从 Tomasz Gawel 找到了this answer,它展示了如何在 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)