首页 > 解决方案 > 在 java 中使用 nodejs 模块(graalvm,缺少加密)

问题描述

我正在为特定应用程序编写一个 java 客户端。已经有一个与应用程序通信的库,一个用 JavaScript 为 node.js 编写的 npm 模块,还有一个使用 webpack 编译的 web 变体。npm 模块使用 java 重写它很复杂,因此我正在寻找一种解决方案来直接从 java 代码执行它。

我尝试使用嵌入在 java 中的 GraalVM 作为脚本引擎来完成它。我面临的问题是 npm lib get-random-values。如果在浏览器中执行,此库使用window.crypto.getRandomValues ,如果在 node.js 环境中执行,则使用require("crypto").randomBytes 。

Graalvm 显然没有 window.crypto.getRandomValues ,或者不知道require也没有require("crypto").randomBytes

是否有 getRandomValues 或 randomBytes 的纯 js 实现?或者也许可以打电话给例如。java实现SecureRandom.generateSeed从javascript作为window.crypto.getRandomValues的替换?

谢谢

更新:

刚刚调查了调用 SecureRandom 的方式。

我创建了具有以下内容的 js 文件

var SecureRandom = Java.type('java.security.SecureRandom');

var window = {
    crypto: {
        getRandomValues: (buf) => {
            //print("buf_length", buf, buf.length);
            var bytes = SecureRandom.getSeed(buf.length);
            buf.set(bytes);
        }
    }
};

导入它,它似乎正在工作。现在我可以加载浏览器版本的 npm 模块而不会出现任何错误。还有一些问题,但不是很严重。

标签: javascriptjavacryptographygraalvm

解决方案


推荐阅读