我正在开发一个插件并且必须创建一个hmac sha512哈希,但是jpm说无法找到加密模块(https://nodejs.org/api/crypto.html#crypto_crypto_createhmac_algorithm_key) - 我不能在firefox插件开发中使用标准节点模块吗?
对不起,我对此很新。
如果没有,是否有另一种方法来创建哈希?
答案 0 :(得分:1)
只能使用npm-hoisted第三方SDK模块,目前此类型的模块不多,例如menuitem。
如果你想创建哈希,那么你可以使用crypto.js库。但你不能直接在index.js中使用它。因为你必须创建页面工作者并在你想要创建哈希时进行消息传递。
要在index.js中创建页面工作程序,您的代码将如下所示:
var HashWorker = require('sdk/page-worker').Page({
contentURL: "./hash.html",
contentScriptFile : ["./crypto.js","./myfile.js"]
});
在myfile.js中,您将使用crypto.js函数创建hash.Note所有文件hash.html,crypto.js和myfile.js必须位于您的插件的数据目录中。
hash.html会看起来像这样:
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
完成所有这些设置后,您可以通过消息传递从index.js传递到myfile.js,反之亦然。
要创建某些东西的哈希值,您可以将消息发送到myfile.js,它们看起来像这样: index.js
//send message to myfile.js to create hash of some value
HashWorker.port.emit('createHash',{data : "whose hash to create"});
//message received from myfile.js containing hash of specified value
HashWorker.port.on('hash_result',function(message){
console.log(message.hash);
});
在myfile.js中,消息传递将如下所示: myfile.js
//message received from index.js to create hash of specified value
self.port.on('createHash',function(message){
var value = message.data
var hash = ...//cryptojs function to create hash of above value.
//send hash created to index.js
self.port.emit('hash_result',{hash : hash});
});
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用Mozilla自己的Components
const { Cu } = require("chrome");
Cu.importGlobalProperties(["crypto"]);
将crypto
object导入插件。由于您刚刚提出要求,您可能会注意到如何将其用于create a hash。示例说明要像
function sha256(str) { // We transform the string into an arraybuffer. var buffer = new TextEncoder("utf-8").encode(str); return crypto.subtle.digest("SHA-256", buffer).then(function (hash) { // whatever you want to do with hash; }); }