Estoy tratando de generar una sal aleatoria de 32 bytes de tamaño. Pero mi motor JS Rhino 1.7.13 no es compatible con la clase SecureRandom.
A continuación se muestra el fragmento de código del mismo.
function getSalt() { var random = new SecureRandom(); var salt1 = new Array(32); random.nextBytes(salt1); return salt1; }Error registrado como se muestra a continuación.
java.util.concurrent.ExecutionException: javax.script.ScriptException: ReferenceError: "SecureRandom" no está definido.
Además, el motor rhino js no permite importar ni cargar bibliotecas externas. ¿Hay alguna manera de que podamos generar sales aleatorias seguras en Rhino?
Para SecureRandom utilice el nombre java.security.SecureRandom . Y la matriz de bytes tiene que ser una matriz de bytes de Java, de lo contrario obtendrá un error:
No se puede convertir org.mozilla.javascript.NativeArray@6b419da a byte[]
Encontré esta respuesta de Tomasz Gawel, que muestra cómo crear una matriz de bytes de Java en Rhino.
Con las modificaciones mencionadas anteriormente, el script completo es:
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)