javascript - 在 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 模块而不会出现任何错误。还有一些问题,但不是很严重。
解决方案
推荐阅读
- webrtc - 正确拆解 WebRTC RTCPeerConnection
- javascript - 投影上下文中连接对象的轮廓着色器?
- python - Pyautogui随机自动按住shift?我猜?
- google-bigquery - Bigquery - 如何组合连续日期范围内的数据
- typescript - 处理联合与交叉打字稿的问题
- java - 如何解决 org.springframework.beans.factory.BeanCreationNotAllowedException?
- remote-debugging - 使用 lldb 进行远程调试时,远程二进制文件是否需要调试符号?
- javascript - 有人能告诉我为什么这个日期选择器不工作吗?
- r - ggplot以特定顺序将多个geom_points分层
- python - 如何使用 Python 从 HTML 源中提取特定值?