在java中使用nodejs模块(graalvm,缺少加密)

3z6pesqy  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(375)

我正在为一个特定的应用程序编写一个java客户端。已经有一个与应用程序通信的库,一个用javascript for node.js编写的npm模块,以及一个使用webpack编译的web变体。使用java重写npm模块非常复杂,因此我正在寻找一种直接从java代码执行它的解决方案。
我尝试使用java中嵌入的graalvm作为脚本引擎来实现它。我面临的问题是npm库获取随机值。如果在浏览器中执行,则此库使用window.crypto.getrandomvalues;如果在node.js环境中执行,则使用require(“crypto”).randombytes。
graalvm没有window.crypto.getrandomvalues显然,或者不知道require,也没有require(“crypto”).randombytes。
是否有getrandomvalues或randombytes的纯js实现?或者可以从javascript调用例如java实现securerandom.generateseed来替换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模块的浏览器版本,没有任何错误。仍然存在一些问题,但不是很严重。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题